Tag: 外部

两个相同名称的静态变量(两个不同的文件)和其他任何文件中的外部变量

在一个文件中将变量声明为静态并在另一个文件中执行extern声明 – 我认为这会在链接时出错,因为在任何对象中都不会看到extern变量,因为在其他文件中声明的变量是静态的。 但不知何故,链接器(瑞萨)没有显示任何错误并创建了可执行文件。 如果上面的用例是正确的,如果2个变量在2个不同的文件中声明为静态而另一个在另一个带extern声明的文件中会发生什么? 在这种情况下,将在2个不同的对象中创建2个不同的存储器,但是哪个变量将被链接用于其他变量,在另一个文件中被声明为extern(因为两个变量名都相同)? 在file1.c static int test_var; fn1() { test_var = 1; } file2.c中 static int test_var; fn2() { test_var = 2; } file3.c中 extern int test_var; fn3() { int x; x = test_var; }

外部链接C库中的exception传播

我正在编写一个使用外部第三方C库的C ++库。 因此,我的图书馆将调用此第三方库中的函数,第三方库将回调到我的库的不同部分。 我想知道在这种情况下exception会发生什么? 假设MyLib :: foo()调用外部C库函数,最终调用MyLib :: bar(),并且bar抛出exception,会发生什么? 将exception正确传播到foo()中的处理程序吗? 谢谢!

在全局范围内将声明与extern,static和no存储说明符混合使用

我一直在研究何时可以在全局范围内混合使用extern , static和no storage specifier声明的变量。 结果让我很困惑。 这是我发现的(每个段落是一个单独的编译单元): /* ok */ int x; int x; /* ok */ int f(); int f(); /* ok */ int x; extern int x; /* ok */ int f(); extern int f(); /* error: static declaration follows non-static declaration */ int x; static int x; /* ok (no warning) */ […]

块范围链接C标准

以下标识符没有链接:声明为对象或函数以外的任何标识符; 声明为函数参数的标识符; 在没有存储类说明符extern的情况下声明的对象的块作用域标识符 。 { static int a; //no linkage } 对于在该标识符的先前声明可见的范围内使用存储类说明符extern声明的标识符,如果先前声明指定内部或外部链接,则后面声明中的标识符的链接与链接相同在先前声明中指明。 如果没有先前声明可见,或者先前声明未指定链接 , 则标识符具有外部链接 。 { static int a; //no linkage extern int a; //a should get external linkage, no? } GCC错误:没有链接的以下声明的extern声明 有人可以解释我为什么会出现这个错误? 谢谢

如何使结构extern并定义其typedef

我正在尝试在C中实现树算法。我在头文件中声明了一个完全独立的外部结构(b_tree_ds.h)。 现在我打算在所有想要使用这个结构的源文件中导入该文件。 所以我必须在标题中使用extern声明它。 现在问题是我想要定义它的typedef。 编译器给出了多个存储类的错误。 我该怎么做 typedef extern struct node { struct node* left; struct node* right; int key; // contains value }NODE; 实际问题如下,我仍然无法解决??? 我最近学会了如何使用带有头文件的多个源文件来使代码可移植和分层。 为了做到这一点,我厌倦了使用这个主体创建我的树程序。 这是我的文件 b_tree_ds.h – 这将包含树节点的数据结构声明 ,可以调用实现树的不同function的各种函数(可以在不同的源文件中) typedef struct node { struct node* left; struct node* right; int key; // contains value }NODE; 当我尝试在typedef extern struct node添加extern时,它会给出多个存储类的错误,但是如果我错过它,我会得到多个定义的错误。 这是我的其他源文件 traverse.h – 包含遍历函数的声明 […]

如何在Windows上包含外部C库

我是C的新手,我试图在不使用任何IDE的情况下包含外部库,只使用文本编辑器和windows cmd上的minGW编译器。 在这种情况下,库是libPNG ,我真的想了解该过程如何不仅适用于此库 。 如果有更好的方法(也更容易)做到这一点,我也想知道。

C中的外部和静态指针

嗨什么可能是静态和外部指针的用法? 如果他们存在

如何在C中从外部.c文件调用函数?

我的档案是 // main.c #include “add.c” int main(void) { int result = add(5,6); printf(“%d\n”, result); } 和 // add.c int add(int a, int b) { return a + b; }

外部声明,T * v / s T

我在遗留项目中看到了以下代码片段。 /* token.c */ struct token id_tokens[MAX_TOKENS]; /* analyse.c (v1) */ extern struct token *id_tokens; /* Raised my eyebrow, id_token declares a pointer */ 我坚持要更改analyse.c以包含如下声明: /* analyse.c (v2) */ extern struct token id_tokens[]; /* I am happy with this. id_tokens declares array of unspecified size. */ 我想要v2因为pointer to T array of T 。 我朋友的反驳说,两者的行为都是一样的,所以我使用v1和v2并不重要。 问题1:不完整类型的数组是否耗尽指针? […]

在头文件中声明一个全局变量`extern const int`,但在源文件中只声明`int`

我正在试验GCC,发现你可以在头文件中声明外部变量const ,但在实现文件中保持它们是可变的。 编辑 :这实际上不起作用。 我将测试代码编译的唯一原因是因为我没有在“header.c”中包含“header.h”。 header.h: #ifndef HEADER_H_ #define HEADER_H_ extern const int global_variable; #endif header.c: int global_variable = 17; 这似乎是一个非常好的function,用于将global_variable readonly保存到header.h的用户,但保持它们可由实现(header.c)修改。 注意:以下代码只是这种声明方式如何阻止赋值给global_variable 。 #include “header.h” int main(void) { global_variable = 34; /* This is an error as `global_variable` is declared const */ return 0; } 因为我之前从未见过技术。 我开始怀疑它是否有效。 这是一个定义明确的行为,还是GCC没有提醒我的错误?