【发布时间】:2017-09-20 19:40:14
【问题描述】:
命名空间中是否存在查找顺序,即 标记命名空间 和 普通命名空间 ?考虑以下代码:
#include <stdio.h>
int main (void){
typedef struct{ //This belongs to ordinary name space
int min;
} st;
st myst;
myst.min=6;
struct myst{ // This belongs to tag name space
int min;
};
myst.min=7;
printf("%d\n%d\n",myst.min,myst.min);
return 0;
}
输出
7
7
我猜,编译器首先会在标签命名空间中查找要打印的变量。我不知道是否对普通命名空间中的相同标识符进行了查找,如果完成了,我不知道为什么它不打印它。
【问题讨论】:
-
“编译器首先在标签命名空间中查找要打印的变量” - 不,它没有。您没有指定标签关键字。
-
不清楚。仅在您指定的名称空间中搜索名称。顺便说一句:没有“标签名称空间”。
-
@StoryTeller 标签关键字?没有得到你。
struct是标签名称。 -
没有。
struct是一个kewyrod。struct id告诉编译器你想要一个标记类型,并且它应该在标记命名空间中查找id。 -
@StoryTeller 当然
struct是一个关键字,如果没有使用typedef定义,它会进入标签命名空间。
标签: c namespaces name-lookup