Tag: extern

如果我使用带有C工具链的extern“C ++”会发生什么?

我的问题主要是关于C ++工具链“理解”C和C ++的事实,所以如果我将一些带有extern “C”代码提供给c ++工具链,我认为它可以理解如何处理它; 但是,如果我将带有extern “C++”代码提供给C工具链呢? 预期的行为是什么?

在c中全局定义变量的extern

我有以下源代码,我感兴趣。 #include extern int foo; int foo = 32; int main() { printf(“%d”, foo); } 这是一段非常正常的代码,当我编译它时 gcc -Wall -Wextra -pedantic foo.c 我没有得到任何警告。 这似乎很奇怪,因为变量既被定义为外部变量又被定义为同一文件中的全局变量。 我很确定链接器很容易在同一个文件中找到外部变量的引用,但它看起来不像编码错误吗? 如果是这样,编译器为什么不警告这个呢?

使用extern将数组与指针链接起来

假设我有两个文件:file1.c-包含一个名为“array [10]”的大小为10的int数组的全局定义。 file2.c-包含一个名为“extern int * array”的int指针,这里我试图将这个指针链接到数组。 但是当我检查file1.c中的数组地址和file2.c中的指针值时,它们都是不同的。 为什么会这样?

C中的外部行为

如果我声明int Array[10]; 在file1.c中 在file2.c中,如果II具有这样的function extern int *Array; fun() { Array[0]=10; } 这有没有问题?

外部如何工作?

extern是C中的存储类。它究竟是如何工作的? 下面给出的代码输出是20.这是如何输出的? #include int main() { extern int a; printf(“%d”, a); return 0; } int a=20;

区别extern“C”vs extern

我是否对整个标题使用extern “C”说明符,或者为每个函数指定extern是否有区别? 据我所知,没有,因为只有函数和变量可以在外部链接,所以当我在每个函数原型和extern变量之前使用extern说明符时,我不需要使用全局extern “C”声明!? 例A: #ifdef __cplusplus extern “C” { #endif void whatever(void); #endif 例B: extern void whatever(void);

C:下标一个不完整类型的数组是合法的吗?

我找不到标准中的相关位,但是gcc和clang允许它,所以我想我想知道它是编译器扩展还是语言的一部分。 如果可以,请提供链接。 这可以通过以下方式产生: extern char arr[]; func(arr[7]); /*No error.*/ 晚编辑:我想我最好能清楚地理解这一点,虽然我已经离开了,但我从未做过这样的事情,所以我将奖励给第一个给我一个明确,简明的参考资料的人。关于为什么允许这样做的C89标准。 如果没有人能在C89中找到答案,C99是可以接受的,但您需要先查看C89标准。

在c / c ++中使用extern背后的概念是什么?

对不起,这类问题。 但是,我对C\C++的关键字extern非常好奇。 在搜索extern解释时,我知道extern告诉编译器变量或函数已经在其他文件或程序中定义。 但如果这是一个案例那么我们为什么要使用extern ? 因为我尝试了一些代码如下: extern int var; int main(void) { var = 10; return 0; } 这段代码给我一个错误信息,作为unresolved external symbol “int var” (?var@@3HA) 。 如果我使用的代码如下: extern int var; int main(void) { int var = 10; return 0; } 它没有显示任何错误,并且给出了与我在main函数中定义的值相同的值。 那么,任何人都可以帮助我关于extern的行为吗? 我对此感到困惑。 如果这不是一个有效的问题,请原谅我。 先感谢您。

如何定义外部变量和声明?

维基说: extern关键字表示“声明而不定义”。 换句话说,它是一种显式声明变量或强制声明而无需定义的方法。 也可以明确定义变量,即强制定义。 这是通过为变量分配初始化值来完成的 。 这意味着, 初始化变量的extern声明用作该变量的定义 。 所以, /* Just for testing purpose only */ #include extern int y = 0; int main(){ printf(“%d\n”, y); return 0; } 应该是有效的( 在C ++ 11中编译 )。 但是当在GCC 4.7.2中使用选项-Wall -Wextra -pedantic -std=c99进行编译时,会产生一个警告: [Warning] ‘y’ initialized and declared ‘extern’ [enabled by default] 哪个不应该。 据我所知, extern int y = […]

如何在头文件中声明extern 2d-array?

我们在LCD.c中有这个声明: unsigned char LCD[8][64] = {((unsigned char) 0)}; 在LCD.h中我们希望有类似的东西: extern unsigned char LCD[][]; 我们收到此错误: Error[Pe098]: an array may not have elements of this type