在C ++中多次声明函数和变量

时间:2016-12-29 05:37:44

标签: c++ declaration definition one-definition-rule

在C ++中,多次声明变量会在编译期间显示错误。例如:

int x;
int x;

在多次声明函数时,编译期间不会显示任何错误。例如:

int add(int, int);
int add(int, int);

为什么在C ++中有这种区别?

1 个答案:

答案 0 :(得分:14)

请注意,int x;不是(仅仅)declaration,而是definition。因此,由于ODR被违反而出现错误,即在一个翻译单元中只允许一个定义。

变量声明可写为:

// a declaration with an extern storage class specifier and without an initializer
extern int x;
extern int x;

与此同时,int add(int, int);完全是一个声明(功能)。一个翻译单元中的多个声明很好,不会违反ODR。