在C中,struct和变量的字段是否具有相同的名称?

时间:2018-03-23 05:59:12

标签: c struct overloading

在C中,struct和变量的字段是否可以具有相同的名称?会有什么问题吗?例如:

struct foo {
    int x
}

main() {
    struct foo j;
    int x = 666;
    j.x = x;
}

这有效吗?

2 个答案:

答案 0 :(得分:1)

  

在C中,struct和变量的字段是否可以具有相同的名称?

是。这是因为struct有自己的命名空间。 C11 §6.2.3 Name spaces of identifiers

  

[...]因此,各种类别的标识符都有单独的名称空间,如下所示:

     

- 结构或工会的成员;每个结构或联合为其成员都有一个单独的名称空间(通过.->运算符用于访问成员的表达式的类型消除歧义;)
   - 所有其他标识符,称为普通标识符(在普通声明符中声明或作为枚举常量)。

答案 1 :(得分:0)

是的,因为struct有另一个命名空间,而main方法中的变量有不同的命名空间,你总是通过使用类似j.x的引用来访问struct变量。

#include<stdio.h>
struct foo {
    int x;
};

void main() {
    struct foo j;
    int x = 666;
    j.x = x;
    printf("struct var x = %d\n",j.x);//struct var x = 666
}