【问题标题】:Why does clang give a warning: unterminated ‘#pragma pack (push, …)’ at end of file?为什么 clang 会在文件末尾发出警告:未终止的“#pragma pack (push, ...)”?
【发布时间】: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) ?

标签: c++ clangd


【解决方案1】:

这是clangd 中的一个已知错误,在https://github.com/clangd/clangd/issues/1167 中进行了跟踪。

请查看该问题以了解当前发生这种情况的原因以及可能的解决方法。

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2014-09-29
    相关资源
    最近更新 更多