Visual Studio:在宏调用后自动缩进而不关闭分号不起作用 我在Visual Studio 2015中为遗留C++项目激活了自动代码格式化。

Visual Studio:在宏调用后自动缩进而不关闭分号不起作用 我在Visual Studio 2015中为遗留C++项目激活了自动代码格式化。,c++,visual-studio-2015,macros,editor,autoformatting,C++,Visual Studio 2015,Macros,Editor,Autoformatting,问题是,特定宏调用后的代码行(由于在宏内部,因此不以分号结尾)总是缩进。我正在Visual Studio 2015中搜索一个设置,以防止在不必安装其他扩展的情况下,需要更改宏定义本身或要求每个人向调用中添加额外的分号(这将修复它) 下面是代码和由此产生的问题的一个简单示例: #include <iostream> #ifdef _DEBUG # define MY_TRACE(X) do { std::cout << X << std::endl; } wh

问题是,特定宏调用后的代码行(由于在宏内部,因此不以分号结尾)总是缩进。我正在Visual Studio 2015中搜索一个设置,以防止在不必安装其他扩展的情况下,需要更改宏定义本身或要求每个人向调用中添加额外的分号(这将修复它)

下面是代码和由此产生的问题的一个简单示例:

#include <iostream>

#ifdef _DEBUG
# define MY_TRACE(X) do { std::cout << X << std::endl; } while (0);
#else
# define MY_TRACE(X) {}
#endif

int main()
{
    MY_TRACE( "Hello World!" )
        return 0;
}
#包括
#ifdef_调试

#定义我的跟踪(X)do{std::cout为什么没有
MY_TRACE
在结尾需要一个分号?附议。一行没有以分号结尾看起来真的很奇怪。@VittorioRomeo这是一种可能性,但需要经历很多遗留代码。还讨论了放弃此宏,只需添加另一个需要分号的宏,但我我想这看起来很奇怪。我承认,即使在看了20年代码之后,它看起来也很奇怪。但是这是一个很长的决定,因为它已经在很多代码中使用了。而且,也许,这已经是答案:现代C++编辑器如何知道或关心过去编码的SINS。(额外)在宏末尾加分号不会有任何影响。它只是一个空语句。您不必更改宏或冒破坏任何内容的风险。