Tag: linkage

C中const的外部链接

当我遇到这种奇怪的行为时,我正在使用C中的 extern关键字。 我有两个文件: 在file1.c #include int main() { extern int a; a=10; printf(“%d”,a); return 0; } file2.c中 const int a=100; 当我一起编译这些文件时,没有错误或警告,当我运行它们时,输出变为10 。 我原以为编译器应该在a=10;行报告错误a=10; 。 此外,如果我将file2.c的内容更改为 const int a; 也就是说,如果我删除全局const变量a的初始化然后编译文件,仍然没有错误或警告,但是当我运行它们时,会发生分段错误。 为什么会出现这种现象? 它是否归入未定义的行为? 这是编译器还是机器依赖的? PS:我看过很多与此问题相关的问题,但要么是C ++,要么只讨论extern 。

extern和extern“C”表示变量

我正在编写一个C ++共享库供C程序使用。 但是,我有一个关于extern和extern “C” 。 请考虑以下代码 我的头文件是这样的: #ifdef __cplusplus extern “C” int global; extern “C” int addnumbers(int a, int b); #else extern int global; #endif 这完美无缺; 我只需要申报 int global; 在我的.cpp或我的.c文件中。 但是,我不明白的是: extern “C”和extern在这里有什么区别? 我尝试评论extern “C” int global并且它有效! 为什么? 我知道extern “C”用于制作C链接。 这就是为什么我有extern “C” int addnumbers(int,int) 。 换句话说,如果我想编写一个将在C程序中使用的C ++函数,我会编写extern “C” 。 现在,全球变量怎么样 – 我猜这里的情况有所不同? 我希望C程序使用名为global的C ++变量,但我可以使用extern而不是extern “C” […]

变量可以声明为static还是extern?

为什么以下不编译? … extern int i; static int i; … 但如果你颠倒了订单,那就很好。 … static int i; extern int i; … 这里发生了什么?