gpt4 book ai didi

clang-format 如何忽略 extern C?

转载 作者:行者123 更新时间:2023-12-04 09:15:50 26 4
gpt4 key购买 nike

这是我当前的示例代码

#ifdef __cplusplus
extern "C"
{
#endif

typedef enum
{
BUY = 1,
SELL = 2
} OrderAction_e;

#ifdef __cplusplus
}
#endif

在我运行 clang 格式后,它发生如下变化。

#ifdef __cplusplus
extern "C"
{
#endif

typedef enum
{
BUY = 1,
SELL = 2
} OrderAction_e;

#ifdef __cplusplus
}
#endif

它为我所有的函数和 typedef 添加了额外的两个空格。

有没有我可以用来忽略外部 C 大括号的选项,这样我的代码看起来就和我上面粘贴的第一个版本的代码一样没有变化。

以下是我公司使用的clang版本

LLVM (http://llvm.org/):
LLVM version 3.4.2

最佳答案

如果您使用的是更高版本的 clang-format,您可能会非常接近。但是对于 3.4.2,我不这么认为。

对于 6.0.0 版,您可以非常接近,但似乎有必要将大括号与 extern "C" 放在同一行以禁用缩进extern "C" 部分。这样做需要使用 BreakBeforeBracesCustom 设置。这种禁用缩进 extern "C" block 的行为似乎没有在任何地方记录,但它确实对我有用。

尝试修改您的 .clang-format 文件以包含以下内容:

BraceWrapping:
AfterClass: true
AfterControlStatement: true
AfterEnum: true # <-- You need this
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: true
AfterStruct: true
AfterUnion: true
AfterExternBlock: false # <-- And this
BeforeCatch: true
BeforeElse: true
IndentBraces: false
SplitEmptyFunction: false
SplitEmptyRecord: false
SplitEmptyNamespace: false
BreakBeforeBraces: Custom # <-- And this

请注意,那里有很多选项,您可以保留这些选项,但通常您会设置它们。只有 AfterEnumAfterExternBlockBreakBeforeBraces 的值对此很重要。查看documentation有关这些设置的更多详细信息。

如果您还没有 .clang-format 文件,您可以先执行 clang-format -dump-config > .clang-format 然后编辑文件。

关于clang-format 如何忽略 extern C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63222182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com