【发布时间】:2020-09-05 16:53:42
【问题描述】:
有两个源文件,a.c 和 b.c。 a.c:
int main(void)
{
foo();
return 0;
}
b.c:
#include <stdio.h>
static void bar(void)
{
puts("Hola!");
}
extern void (*foo)(void) = bar;
一起编译(cl a.c b.c),运行程序,程序会崩溃。这是为什么呢?
但是,像extern void (*foo)(void); 这样的声明可以解决问题。
我的环境是 Windows MSVC:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
我猜是因为:
- 由于没有声明
foo,编译器猜测它是一个函数。 - 但是
foo不是函数,而是变量,所以调用失败。
【问题讨论】:
-
对不起,我意识到这个骗局是错误的。
标签: c visual-c++