作者descent (「雄辯是銀,沉默是金」)
看板C_and_CPP
標題Re: [問題] 避免「變數名稱」衝突「class名稱」
時間Fri May 12 16:37:57 2017
這個問題很詭異
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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1494578284.A.35A.html
1F:→ uranusjr: 不奇怪吧, 就定義覆蓋的問題啊 (合不合標準我沒查) 05/12 16:57
2F:→ descent: 一個是變數名稱, 一個是變數型別的名稱, 為什麼會衝突? 05/12 17:08
是可以想成這樣嗎?
int main(int argc, char *argv[])
{
float my_time;
int char;
return 0;
}
3F:→ uranusjr: 不太一樣, char 是保留字, 所以上面會 error, 但自定義 05/12 17:22
4F:→ uranusjr: 型別和變數都是 identifier, 是可以覆蓋的 05/12 17:22
5F:→ uranusjr: 是在你真的使用那個 identifier (例如 cout) 才會去檢查 05/12 17:22
6F:→ uranusjr: 那個 identifier 代表什麼, 這時候才會出錯 05/12 17:23
8F:→ AstralBrain: 看 "type/non-type hiding" 那段 05/12 18:16
感謝
※ 編輯: descent (101.9.196.61), 05/12/2017 22:35:23