Re: [問題] 避免「變數名稱」衝突「class名稱」

看板C_and_CPP作者 (「雄辯是銀,沉默是金」)時間7年前 (2017/05/12 16:38), 7年前編輯推噓1(107)
留言8則, 3人參與, 最新討論串2/3 (看更多)
這個問題很詭異 typedef int now_time; int main(int argc, char *argv[]) { int now_time; now_time my_time; return 0; } descent@debian64:tmp$ gcc b.c b.c: In function 'main': b.c:6:12: error: expected ';' before 'my_time' now_time my_time; ^ --------------------------------------------------- typedef int now_time; int main(int argc, char *argv[]) { now_time my_time; int now_time; return 0; } 編譯正確 真奇怪! -- 紙上得來終覺淺,絕知此事要躬行。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.98.141.254 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1494578284.A.35A.html

05/12 16:57, , 1F
不奇怪吧, 就定義覆蓋的問題啊 (合不合標準我沒查)
05/12 16:57, 1F

05/12 17:08, , 2F
一個是變數名稱, 一個是變數型別的名稱, 為什麼會衝突?
05/12 17:08, 2F
是可以想成這樣嗎? int main(int argc, char *argv[]) { float my_time; int char; return 0; }

05/12 17:22, , 3F
不太一樣, char 是保留字, 所以上面會 error, 但自定義
05/12 17:22, 3F

05/12 17:22, , 4F
型別和變數都是 identifier, 是可以覆蓋的
05/12 17:22, 4F

05/12 17:22, , 5F
是在你真的使用那個 identifier (例如 cout) 才會去檢查
05/12 17:22, 5F

05/12 17:23, , 6F
那個 identifier 代表什麼, 這時候才會出錯
05/12 17:23, 6F

05/12 18:16, , 8F
看 "type/non-type hiding" 那段
05/12 18:16, 8F
感謝 ※ 編輯: descent (101.9.196.61), 05/12/2017 22:35:23
文章代碼(AID): #1P5NHiDQ (C_and_CPP)
文章代碼(AID): #1P5NHiDQ (C_and_CPP)