小编Dav*_*son的帖子

为什么gcc允许类型为void(非指针)的extern声明?

为什么gcc允许类型为void的extern声明?这是扩展还是标准C?这有可接受的用途吗?

我猜这是一个扩展,但我没有在http://gcc.gnu.org/onlinedocs/gcc-4.3.6/gcc/C-Extensions.html找到它.

$ cat extern_void.c
extern void foo; /* ok in gcc 4.3, not ok in Visual Studio 2008 */
void* get_foo_ptr(void) { return &foo; }

$ gcc -c extern_void.c # no compile error

$ gcc --version | head -n 1
gcc (Debian 4.3.2-1.1) 4.3.2
Run Code Online (Sandbox Code Playgroud)

将foo定义为void类型当然是编译错误:

$ gcc -c -Dextern= extern_void.c
extern_void.c:1: error: storage size of ‘foo’ isn’t known
Run Code Online (Sandbox Code Playgroud)

为了进行比较,Visual Studio 2008在extern声明中给出了错误:

$ cl /c extern_void.c 
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) …
Run Code Online (Sandbox Code Playgroud)

c gcc

21
推荐指数
2
解决办法
1723
查看次数

标签 统计

c ×1

gcc ×1