相关疑难解决方法(0)

C++翻译单元的语法

我很长一段时间以来的理解是,在预处理器运行之后,C++转换单元是一系列声明(让我提醒任何定义也是一个声明).

很多人都赞同这个说法,但没有人给出反例.但我自己发现这个让我烦恼的例子:

int x;       //declaration

;            // ??? EMPTY DECLARATION?

int main()   //dec
{            //la
}            //ration
Run Code Online (Sandbox Code Playgroud)

这与MSVC和在线照片很好地编辑.我知道标准定义了一个空语句,但我从未听说过空声明.所以,我看到三个选择:

  • 我的理解是正确的,标准定义了一个空声明
  • 我的理解是正确的,但标准没有定义空声明,上面的翻译是不正确的
  • 我的理解是不正确的,即C++ TU不是一系列声明

请帮我解除疑惑.谢谢

c++ grammar declaration

9
推荐指数
2
解决办法
1295
查看次数

一个C++类函数应该以}结尾; 还是只有}?

关于C++语法的基本问题.

应该以c ++函数结束; 或者没关系?

或者这两个例子有什么区别?

结束;

void Test :: print()
{
  ...
};
Run Code Online (Sandbox Code Playgroud)

没有;

void Test :: print()
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

我已经看过C++代码有和没有,但我没有得到区别.

/谢谢


更新:

在这种情况下; 应该避免,因为它没有做任何有用的事情,甚至可能在将来成为一个问题.

c++ syntax

5
推荐指数
1
解决办法
608
查看次数

Visual Studio:宏调用后自动缩进而不关闭分号不起作用

我已在 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 }

C++ 自动套用格式设置

以及以下缩进设置:

C++ 缩进设置

我已经尝试了那里和其他地方的所有可能和不可能的设置组合(包括例如“制表符/缩进/智能”的转动)。每次 Visual Studio C++ 编辑器都会继续缩进宏后面的行。

我在 SO 或互联网上也找不到任何东西。我得到的最接近的,但没有答案或不同编辑器/语言的位置:

c++ macros editor autoformatting visual-studio-2015

5
推荐指数
0
解决办法
2112
查看次数