c – 禁用特定代码块的语言扩展?

我想在MSVC编译器中禁用语言扩展,但仅限于特定的代码块.

有一个compiler option可以配置为禁用整个翻译单元的语言扩展(例如,整个文件),但我不想这样做.我最终希望在编译#include语句和其他预处理程序时启用语言扩展,但是为我的实际代码禁用它.

有没有办法禁用特定代码块的语言扩展,或在MSVC 2008中使用#pragma?

解决方法

它应该是不可能的,因为当启用语言扩展时,Visual Studio使用不同的算法来编译代码,这在预处理器扩展之后发生.换句话说,不可能用扩展编译一半文件,而另一个没有.

让我用一个使用可变长度参数列表扩展的示例来说明.如果在一个头文件中将函数定义为以下内容,该怎么办:

void myfunc( int x,... );
void myfunc( int x,char * c )
{ }

稍后在您的源文件中调用

char * c = new char;
myfunc(5,c);

根据ANSI C,头文件中的声明完全没有意义,因此应该调用带有“…”的myfunc,而根据MSVS应该使用第二个函数.

相关文章

一.C语言中的static关键字 在C语言中,static可以用来修饰局...
浅谈C/C++中的指针和数组(二) 前面已经讨论了指针...
浅谈C/C++中的指针和数组(一)指针是C/C++...
从两个例子分析C语言的声明 在读《C专家编程》一书的第三章时...
C语言文件操作解析(一)在讨论C语言文件操作之前,先了解一下...
C语言文件操作解析(三) 在前面已经讨论了文件打开操作,下面...