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

Disable Language Extensions For A Specific Block Of Code?

本文关键字:语言 扩展 代码      更新时间:2023-10-16

我想禁用MSVC编译器中的语言扩展,但只针对特定的代码块。

有一个编译器选项,可以配置为禁用整个翻译单元的语言扩展(例如,整个文件),但我不希望这样。我想,最终,当我编译#include语句和其他预处理器的东西时,启用语言扩展,但禁用对于我的实际代码。

是否有一种方法可以禁用特定代码块的语言扩展,或者在MSVC 2008中使用#pragma ?

这应该是不可能的,因为当语言扩展被启用时,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应该使用第二个函数