从ISO标准草案中:§3.0/9:

n3234说:



有人可以举例说明这一点吗?

那句话实际上是在说什么?有人可以从程序上证明这一点吗?

最佳答案

当然!这就是说,如果您有多个源文件(翻译单元)都使用相同的名称(例如,变量,类或函数的名称),那么这些不同的文件可能正在谈论相同的变量,类或函数,假设该实体的声明方式使其在不同文件中可见(即,取决于其链接)。

例如,如果我有此文件:

A.cpp:

int globalInt;

int main() {
     globalInt = 137;
}

这是这里:

B.cpp:
extern int globalInt;

void foo() {
    globalInt = 42;
}

然后,在这两个文件中,名称globalInt指的是A.cpp中定义的全局int变量globalInt。这就是这句话的全部内容。

但是请注意,如果我声明的globalInt没有外部链接,那么这两个文件将讨论不同的变量。例如,在这种情况下:

C.cpp:
static int globalInt;

int main() {
     globalInt = 137;
}

D.cpp:
static int globalInt;

void foo() {
    globalInt = 42;
}

现在,尽管C.cpp中引用的globalInt变量具有相同的名称,但它与D.cpp中的ojit_code变量不同。

希望这可以帮助!

10-02 00:57