我在一个仅包含头文件的库中定义了一个函数,如下所示:
inline bar **foo_ptr() {
static bar *value = NULL;
return &value;
}
这是我初始化全局变量而不在 *.c 文件中定义它的 hackish 方式。
这在 VS2010 中编译得很好(在 #define inline __inline 之后),但是在 MinGW 中尝试编译它时,它会在多重定义愤怒的愤怒中死去。这让我很伤心。
AFAIK,我不能只使用 static inline
函数,因为它会创建多次出现的值,对于这种情况,这是一件非常糟糕的事情。
我应该真正使用什么关键字才能完成这项工作?我是不是完全错了?是否有其他方法可以将仅 header 全局变量初始化为 NULL?
我宁愿远离初始化方法。
谢谢:D
最佳答案
C99 标准在§6.7.4 函数说明符部分说:
¶2 An inline definition of a function with external linkage shall not contain a definition of a modifiable object with static storage duration, and shall not contain a reference to an identifier with internal linkage.
您的函数当前正在尝试返回一个指向局部变量的指针;这是众所周知的禁忌。但是该标准禁止您将该变量更改为静态变量。如果有一个外部变量 value
,那么它就可以工作了。但它可能会破坏您试图实现的目标:
extern bar *value;
inline bar **foo_ptr() {
value = NULL;
return &value;
}
但是变量必须被声明,所以它是可访问的。它也必须在某处定义。坦率地说,如果您需要一个全局变量,最好接受(声明、定义)一个全局变量。
关于c - 如何在 C 中初始化仅 header 的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9271396/