C- #line与全球静态范围的关系是什么?



给定一个C文件(foo.c(,如下:

#line 1 "a.c"
static int bar = 1;
#line 2 "b.c"
static int bar = 2;
#line 2 "a.c"
int foo(){
    return bar;
}

是在同一范围或单独范围内的两个栏声明(即foo((返回1(?

注意:我对基于标准的正确行为感兴趣,而不仅仅是"我的编译器做什么"(因此,语言律师标签(

#line信息不会更改翻译单元(TU(。您的tu(源文件加上文件(包含两个相同(static(变量的定义。这是一个错误。编译器拒绝它。它如何报告错误可能会受到#line指令的影响,但是无论#line指令如何,将报告错误 - 编译器正在尝试编译单个TU,而TU是错误的。

最新更新