C语言中结构体成员与变量同名是否合法?是否存在问题?示例代码是否有效?
结构体成员字段能否与普通变量同名?这种情况会引发问题吗?
当然可以!结构体的成员字段和普通变量同名是完全符合C语言语法规则的,而且只要你正确访问成员,基本不会引发歧义问题。
C语言里,结构体成员的名字属于单独的“成员名空间”,和普通变量的作用域是分开的。编译器通过你是否使用成员访问运算符(.或者->)来区分你要引用的是结构体成员还是普通变量——只要你写清楚结构体变量.成员名,编译器就不会和同名的普通变量搞混。
看你给出的这段代码(我补了结构体定义后面的分号,原代码漏了,不过不影响核心逻辑):
struct foo { int x; }; main() { struct foo j; int x = 666; j.x = x; }
这段代码是完全合法有效的。执行的时候,j.x会被正确赋值为局部变量x的值666——编译器很清楚左边的x是结构体j的成员,右边的x是当前作用域的普通变量,不会产生混淆。
不过要提一句:如果在某些复杂的作用域嵌套场景里(比如嵌套结构体、同名变量在不同作用域),你还是得稍微留心,但只要遵循成员访问的语法规范,就不会有问题。
内容的提问来源于stack exchange,提问作者mark mark
相关产品推荐
相关产品推荐

