我想了解外部联系和内部联系及其区别.
我也想知道的意思
const默认情况下,变量内部链接,除非另有声明extern.
在C++中,可以static在翻译单元中使用关键字来影响符号的可见性(变量或函数声明).
在n3092,这被弃用了:
附件D.2 [depr.static]
在命名空间范围内声明对象时,不推荐使用static关键字(见3.3.6).
在n3225中,这已被删除.
它确实强调,为了与C兼容(以及将C程序编译为C++的能力),弃用令人讨厌.但是,直接将C程序编译为C++本身就是一种令人沮丧的经历,所以我不确定它是否值得考虑.
有谁知道为什么它被改变了?
当我写下面的程序时:
档案1:
#include <stdio.h>
int global;
void print_global1() {
printf("%p\n", &global);
}
Run Code Online (Sandbox Code Playgroud)
档案2:
#include <stdio.h>
char global;
void print_global2() {
printf("%p\n", &global);
}
Run Code Online (Sandbox Code Playgroud)
档案3:
void print_global1();
void print_global2();
int main()
{
print_global1();
print_global2();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
$ ./a.out
0x804a01c
0x804a01c
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
-Wall -Wextra -ansi......)PS:第二个问题是架构/编译器相关,所以让我们把gcc或Visual C++(对于C)的int大小为32位
编辑:这不是C++的问题,但对于C!
我使用gcc版本4.4.1和Ubuntu 9.10,这是编译控制台输出:
$ ls
global_data1.c global_data2.c global_data.c
$ gcc -Wall -Wextra -ansi global_data*.c
$ ./a.out
0x804a01c
0x804a01c
or
$ gcc -Wall -Wextra -ansi -c global_data*.c
$ …Run Code Online (Sandbox Code Playgroud)