【发布时间】:2022-07-08 14:34:14
【问题描述】:
我在启用 clangd 的 vscode 中创建了一个 main.cpp,并将以下代码放入其中。
clangd 用警告消息警告第一行:
警告:文件末尾未终止的“#pragma pack (push, ...)”
main.cpp的全部内容:
#pragma pack(push) // warning on this line
#pragma pack(1)
struct A
{
int a;
short b;
char c;
};
#pragma pack(pop)
另请参阅:https://releases.llvm.org/13.0.0/tools/clang/docs/DiagnosticsReference.html#wpragma-pack
我认为这是#pragma pack(push)的一个很常见的用法,我不明白为什么会产生警告。
对我来说更奇怪的是,如果我在第一行之前添加分号,警告就会消失。
; // Add a semicolon
#pragma pack(push) // The warning disappears
#pragma pack(1)
struct A
{
int a;
short b;
char c;
};
#pragma pack(pop)
背后的原因是什么?
【问题讨论】:
-
编译指示之前是什么?
-
这是一条编译指令...
-
main.cpp中没有其他代码,所有代码都粘贴在这里。 @SamVarshavchik
-
这不是露营警告。它更多地与代码分析插件有关。
-
如果你这样做,它仍然会发出警告吗:
#pragma pack(push, 1)?