我想知道如何在 C 中定义一个引用为空的对象?
// definition of foo
...
void * bar = &foo; // bar must be null
我可以找到一些方法来做到这一点,但没有一个适合我的需要。
__attribute__((weak)) extern int foo; //not working with cygwin/gcc 3.4
__attribute__((at(0))) int foo; //only with rvds
#define foo (*(int*) 0) //cannot be embedded in a macro
实际上,我更喜欢符合标准的解决方案(c99),但任何工作都可以。
编辑:这样做的原因是 bar 并不总是为空。这是一个更相关的例子:
// macro that will define foo to a real object or to *null
DECL(foo);
int * bar = &foo;
if(bar) {
// we can call func
func(bar);
} else {
// bar undefined
exit(-1);
}
当然,这仍然不是很相关,因为我可以在我的情况下使用#if。该项目实际上涉及大型结构、大量文件、一些编译器、一些 cpu 目标以及许多程序员,这些程序员产生的错误的概率与他们使用的语法的复杂性成指数级。这就是为什么我想要一个简单的宏来声明我的 foo 对象。