作者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/cn.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