Tag: extern

重新定义; 不同的基本类型(typedef struct)

当我们在不同的文件中定义结构时,我在尝试使结构正常工作时遇到了一些麻烦。 据我所知,错误告诉我结构被定义了两个不同的时间。 我相信也许我可能需要在某处使用extern? 我尝试过试验并在Google上寻求帮助,但无济于事。 任何帮助都将非常感谢,谢谢。 我的所有四个文件都在下面。 文件:Foo.h typedef struct { int number; } my_struct; // Redefinition; different basic types 文件:Foo.c #include “Foo.h” #include “Bar.h” #include my_struct test; int main(void) { test.number = 0; DoSomething(&test); printf(“Number is: “, &test.number); } 文件:Bar.h #include “Foo.h” void DoSomething(my_struct *number); 文件:Bar.c #include “Bar.h” void DoSomething(my_struct *number) { number->number = 10; […]

extern声明和函数定义都在同一个文件中

我只是浏览gcc源文件。 在gcc.c ,我找到了类似的东西 extern int main (int, char **); int main (int argc, char **argv) { 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中但是会在项目的其他地方找到。 但是在这里, main定义是在extern声明之后。 那么extern声明服务的目的是什么? 看起来,在这个具体的例子中, extern似乎表现得像我们在汇编中使用的export ,我们在模块之外输出一个特定的符号 有任何想法吗?

更改外部变量的值

我们在File1.c中 int arr[10]; 在File2.c中 extern int *arr; int main() { arr[0]=10; return 0; } 这有什么问题可以解决?为什么?

c99内联语义与gcc(mspgcc)

我正在编写一些我希望内联的函数。 在这里阅读并使用第二个c99内联选项,内联所有声明和定义,如下所示: extern inline void SPFD54124B_write_cmd(uint16_t command); 在标题中,和 inline void SPFD54124B_write_cmd(uint16_t command) { spi_write(command, CMD_WIDTH); } 在相应的c文件中。 我期待获得function的内联版本。 但是当我编译我得到: Generating dependencies dep/spi.d from src/spi.c Generating dependencies dep/spfd54124b.d from src/spfd54124b.c Generating dependencies dep/pomodoro.d from src/pomodoro.c Generating dependencies dep/font8x8_ualnum.d from src/font8x8_ualnum.c Generating dependencies dep/font8x8_basic.d from src/font8x8_basic.c Generating dependencies dep/evading_util.d from src/evading_util.c Compiling src/evading_util.c Compiling src/font8x8_basic.c Compiling src/font8x8_ualnum.c […]

链接器如何知道extern函数的定义在哪里?

我读了几篇post并得出结论,extern告诉编译器“这个函数存在,但它的代码在其他地方。不要惊慌。” 但链接器如何知道函数的定义位置。 我的案例: – 我正在研究Keil uvision 4.有一个头文件grlib.h,主函数在grlib_demo.c(它包括grlib.h)。 现在,有一个函数GrCircleDraw()在Circle.c中定义并在grlib_demo.c中调用,还有一个语句 extern void GrCircleDraw(所有参数); 在grlib.h中。 我的查询是链接器如何知道GrCircleDraw()的定义,因为Circle.c不包含在grlib.h和grlib_demo.c中 注意: – 文件grlib.h和Circle.c位于同一文件夹中。 代码运行成功。

不同的编译结果不使用C ++中的C vs extern

当我在两个不同的源文件中声明一个全局变量并且只在其中一个源文件中定义它时,我得到的C ++编译结果与C相比不同。请参阅以下示例: main.c中 #include #include “func.h” // only contains declaration of void print(); int def_var = 10; int main() { printf(“%d\n”, def_var); return 0; } func.c #include #include “func.h” /* extern */int def_var; // extern needed for C++ but not for C? void print() { printf(“%d\n”, def_var); } 我用以下命令编译: gcc/g++ -c main.c -o main.o gcc/g++ […]

一个function内的“extern”?

那么,阅读“有点旧”的书(“C编程语言”,第二版,丹尼斯·里奇),我得到了以下几点: 外部变量必须在任何函数之外定义一次; 这为它留出了存储空间。 还必须在每个想要访问它的函数中声明变量 我就像 – 什么?! “还必须在每个想要访问它的函数中声明变量”。 然后,我又一次感到震惊: int max; /* … */ int main() { extern int max; /* … */ } 还有一个 – 什么?! 据我所知(显然,它并不多,而且远远不够), extern只有在某个地方定义一个全局变量并且你想通过另一个文件访问它时才有意义(不是再次定义它)。 所以: 在main或任何其他function中,这个extern int max什么意义? 该标准是否真的说,这是必须的 (我需要声明,对于这个例子,每个函数中的最大值 ,它将使用它吗?) C ++是否相同(这就是我放置C ++标签的原因)? 这是我第一次看到这样的东西。 注意:这与在函数内声明静态变量作为extern的用法有什么不同?

C:头文件中’extern’的用途是什么?

请原谅我,如果这听起来是一个多次被问过的问题,但我向你保证这有点不同。 我使用Codeblocks进行C编程,最近我开始想知道为什么有人在C中使用头文件。我理解它用于声明和/或定义变量结构。 但这是我尝试过的东西,现在我很困惑。 我有一个名为的头文件 test1.h #ifndef TEST1_H_INCLUDED #define TEST1_H_INCLUDED static int testvar = 233; extern int one; extern void show(); #endif // TEST1_H_INCLUDED 和另外两个文件 headertest.c #include”test1.h” #include int one = 232; int main() { testvar = 12; printf(“The address of one is %p and value is %d”,&testvar,testvar); printf(“value of one is %d”,one); show(); return 0; […]

在Objective-C代码中使用extern“C”的链接器错误

我正在尝试创建一些可以从iPhone应用程序中的Objective-C和C ++代码调用的实用程序函数。 我有第三方C ++类,无法编译为ObjectiveC ++(。mm)。 我有一个头文件声明我的函数,然后是一个定义它们的.c文件。 我已检查拼写错误三倍,但由于某种原因,我的链接器无法找到任何函数的定义。 这是C辅助函数的标题: #ifndef FILE_LOADER_H #define FILE_LOADER_H #if __cplusplus extern “C” { #endif void * loadDataFromFile(const char * szFilename, bool bDocument); void * loadImageFromFile(const char * szFilename, bool bDocument); void loadMeshFromFile(const char *szFilename, void* pMesh); #if __cplusplus } // Extern C #endif #endif 这是.c文件: #include “FileLoader.h” #include #include #include void […]

为什么C ++ 11不支持在静态成员函数上声明extern“C”?

前提是我有一个包含声明为void g(void (*callback)());的函数的C库void g(void (*callback)()); 以下代码优雅但非法: struct A { // error C2159: more than one storage class specified (VC++ Nov 2012 CTP) static extern “C” void callback() {} }; g(A::callback); 为什么C ++ 11不支持这个?