我想在MSVC编译器中禁用语言扩展,但仅限于特定的代码块。
有一个compiler option可以配置为禁用整个翻译单元的语言扩展(例如,整个文件),但我不想这样做。在编译#include
语句和其他预处理程序时,我最终希望启用语言扩展,但禁用它用于我的实际代码。
有没有办法禁用特定代码块的语言扩展,或者在MSVC 2008中使用#pragma
?
答案 0 :(得分:1)
这是不可能的,因为当启用语言扩展时,Visual Studio使用不同的算法来编译代码,这在预处理器扩展之后发生。换句话说,不可能用扩展名编译一半文件,而另一个没有。
让我用一个使用Variable-Length Argument Lists
扩展名的示例来说明。如果在一个头文件中将函数定义为以下内容,该怎么办:
void myfunc( int x, ... );
void myfunc( int x, char * c )
{ }
稍后在源文件中调用
char * c = new char;
myfunc(5, c);
根据ANSI C,头文件中的声明完全没有意义,因此应该调用带有“...”的myfunc,而根据MSVS应该使用第二个函数。