为什么“const extern”会出错?

时间:2017-07-06 06:53:11

标签: c gcc global-variables const extern

以下代码正常工作:

#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会出错?

3 个答案:

答案 0 :(得分:6)

标准说:
C11-§6.7/ 4

  

同一范围内引用同一对象或函数的所有声明都应指定兼容类型

const intint与同一范围内的同一对象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)

您说fooconst,然后尝试使用其他声明更改其常量。 这样做,你应该没事。

  const extern int foo; // With constant
  const int foo = 42;