我很长一段时间以来的理解是,在预处理器运行之后,C++转换单元是一系列声明(让我提醒任何定义也是一个声明).
很多人都赞同这个说法,但没有人给出反例.但我自己发现这个让我烦恼的例子:
int x; //declaration
; // ??? EMPTY DECLARATION?
int main() //dec
{ //la
} //ration
Run Code Online (Sandbox Code Playgroud)
这与MSVC和在线照片很好地编辑.我知道标准定义了一个空语句,但我从未听说过空声明.所以,我看到三个选择:
请帮我解除疑惑.谢谢
关于C++语法的基本问题.
应该以c ++函数结束; 或者没关系?
或者这两个例子有什么区别?
结束;
void Test :: print()
{
...
};
Run Code Online (Sandbox Code Playgroud)
没有;
void Test :: print()
{
...
}
Run Code Online (Sandbox Code Playgroud)
我已经看过C++代码有和没有,但我没有得到区别.
/谢谢
更新:
在这种情况下; 应该避免,因为它没有做任何有用的事情,甚至可能在将来成为一个问题.
我已在 Visual Studio 2015 中为旧版 C++ 项目激活自动代码格式化。
问题在于,特定宏调用之后的代码行(由于位于宏内部而不以分号结束)始终是缩进的。我正在 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;
}
Run Code Online (Sandbox Code Playgroud)
所以我有以下设置,它会自动缩进,例如 on<Enter>或 with }:
以及以下缩进设置:
我已经尝试了那里和其他地方的所有可能和不可能的设置组合(包括例如“制表符/缩进/智能”的转动)。每次 Visual Studio C++ 编辑器都会继续缩进宏后面的行。
我在 SO 或互联网上也找不到任何东西。我得到的最接近的,但没有答案或不同编辑器/语言的位置: