我已经尝试过Visual Studio 插件,但您必须选择要应用 clang 的代码,然后调用格式化程序。CTRL+A CTRL+R CTRL+F对于每个文件也是如此。
有没有办法对整个项目和/或整个解决方案执行此操作,而无需手动检查每个文件?
我使用以下样式选项以 clang-format 进行指针对齐:
DerivePointerBinding: false
PointerBindsToType: false
DerivePointerAlignment: false
PointerAlignment: Left
Run Code Online (Sandbox Code Playgroud)
例如,我想区分指针 ( *) 和引用 ( )&
auto& ret;
char *ch;
Run Code Online (Sandbox Code Playgroud)
现在,pointer( *) 和reference( &) 要么左对齐,要么右对齐,要么居中对齐。
如何仅禁用指针对齐?
我有一个带有.clang-format和simple.c源代码的 git 存储库。在本地模式下,即在本地磁盘上编辑,它尊重样式文件。但是,如果我使用 Tramp 模式编辑相同的存储库,则将clang-format使用某些默认样式文件(我不知道它是在哪里拾取的)格式化源代码,并且不会尊重同一远程目录中存在的样式文件。
Q1:我该如何解决这个问题?
Q2:(也许更容易)tramp-mode 下的 clang-format 默认在哪里获取样式文件?
考虑以下代码段(使用类似构建器的模式来构造对象):
auto const ci = ::vk::InstanceCreateInfo{}.setPApplicationInfo(&ai).setEnabledExtensionCount(count).setPpEnabledExtensionNames(extensionsArray).setEnabledLayerCount(requiredLayers.size()).setPpEnabledLayerNames(requiredLayers.data());
Run Code Online (Sandbox Code Playgroud)
我希望它可以被格式化为:
auto const ci = ::vk::InstanceCreateInfo{}
.setPApplicationInfo(&ai)
.setEnabledExtensionCount(count)
.setPpEnabledExtensionNames(extensionsArray)
.setEnabledLayerCount(requiredLayers.size())
.setPpEnabledLayerNames(requiredLayers.data());
Run Code Online (Sandbox Code Playgroud)
但 clang 坚持认为:
auto const ci = ::vk::InstanceCreateInfo{}
.setPApplicationInfo(&ai)
.setEnabledExtensionCount(count)
.setPpEnabledExtensionNames(extensionsArray)
.setEnabledLayerCount(requiredLayers.size())
.setPpEnabledLayerNames(requiredLayers.data());
Run Code Online (Sandbox Code Playgroud)
我怎样才能控制它?似乎没有选择(比如AlignMemberAccess)。
我们的存储库的根文件夹中有一个自定义文件,并对所有C++ 文件.clang-format使用 clang-format 。-style=fileC
我喜欢只更改一个文件的 clang-format 格式规则。我特别喜欢将BinPackArguments形式切换true到false.
我知道,我可以将.clang-format文件放在相应的文件夹中。该选项会影响该文件夹中的所有文件。
一次以不同的方式格式化它不是一个选项,因为我们的版本控制系统将拒绝未格式化的文件。
我知道,我可以通过评论关闭格式化程序
// clang-format off
Run Code Online (Sandbox Code Playgroud)
这样做的缺点是文件根本没有格式化。
有没有一种方法可以仅更改一个文件的一个选项(也许通过评论)?
我想要这个:
int x{ 0 };
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
int x{0};
Run Code Online (Sandbox Code Playgroud)
但我在文档中没有看到它的选项。
有:
但我没有看到大括号的选项。这在 clang 格式中可行吗?
编辑:发布的第一个答案使用Cpp11BracedListStyle. 这样做的问题是它可以防止数组中的换行符。因此,即使文字数组中有 100 个元素也不会出现中断。这是一个太大的副作用,难以接受。
我想配置 clang-format 以在函数名称之后和仅在函数定义的左括号之前添加空格。
SpaceBeforeParens: Always
Run Code Online (Sandbox Code Playgroud)
此选项为每个 if、for 循环和函数调用留出空间。
无论如何,是否可以将其自定义为仅在函数定义时放置空间,而不是在函数调用、for、if 的情况下放置空间。我需要如下的东西。
函数定义
int foo ()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
函数调用。(注意函数名和括号之间有空格)
foo();
Run Code Online (Sandbox Code Playgroud) 我正在自学 C++,并与 Bazel 一起开发一个小项目。我想确保我正在编写安全的代码并遵循合理的最佳实践,但我不确定如何去做。我知道一些静态分析工具,例如tsan和其他分析器、clang-tidy或cpplint。
但是我不确定应该如何使用 Bazel 设置这些工具。有些人已经找到了看起来像自定义的解决方案,例如Drake(请参阅 参考资料cpplint.bzl)或apollo,但是需要编写一堆自定义构建工具链逻辑才能使这些解决方案发挥作用似乎很奇怪。有没有正确的方法来设置这些?
在我们的项目中,我们有 C 和 C++ 文件。这些文件不遵循相同的准则。有没有办法区分 clang-format 中的 C 和 C++?
您可以在 .clang-format 文件中声明多种语言,但不幸的是它无法识别 Language:C。
我们是否必须在不同的目录中声明多个 .clang 格式的文件(基于该目录包含的语言)?
理想情况下,我们希望使用 -style=file 并能够在项目中的每个文件上运行 clang-format 。
我想为 java、javascript 和 c++ 创建一个 .clang 格式。我知道如何转储单一语言的示例配置,但不知道如何合并这 3 个配置文件。