以下代码正常工作:
#include <stdio.h>
extern int foo; // Without constant
int foo = 42;
int main()
{
printf("%d\n",foo);
return 0;
}
但是,以下代码会出错:
#include <stdio.h>
const extern int foo; // With constant
int foo = 42;
int main()
{
printf("%d\n",foo);
return 0;
}
那么,为什么const extern
会出错?
答案 0 :(得分:6)
标准说:
C11-§6.7/ 4
同一范围内引用同一对象或函数的所有声明都应指定兼容类型
const int
和int
与同一范围内的同一对象foo
不兼容。
答案 1 :(得分:4)
这两个声明是矛盾的:
const extern int foo; // With constant
int foo = 42;
第一个将foo
声明为const,第二个将其声明为非const。
错误讯息:
prog.cpp:4:5: error: conflicting declaration
‘int foo’ int foo = 42;
^~~
prog.cpp:3:18: note: previous declaration as ‘const int foo’
const extern int foo; // With constant
^~~
答案 2 :(得分:3)
您说foo
为const
,然后尝试使用其他声明更改其常量。
这样做,你应该没事。
const extern int foo; // With constant
const int foo = 42;