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

Declaring functions and variables multiple times in C++

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

int x;
int x;

虽然多次声明一个函数在编译过程中没有显示任何错误。例如:

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

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

注意 int x; 不是(只是) declaration, it's definition. So error arisen since ODR 是违反的,即在一个翻译单元中只允许一个定义。

变量声明可以写成:

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

同时int add(int, int);正是一个(函数的)声明。一个翻译单元中的多个声明可以,不违反ODR。