C++ 如何为代码块禁用Eclipse CDT代码格式化程序

C++ 如何为代码块禁用Eclipse CDT代码格式化程序,c++,eclipse-cdt,code-formatting,C++,Eclipse Cdt,Code Formatting,CDT代码格式化程序有一个相当不错的选项选择,但它似乎没有一个允许用户告诉它忽略代码块的特性。Java代码格式化程序中存在此功能: // @formatter:off ... // code that should not be formatted // @formatter:on 这个功能是否存在,而我只是不知道,或者有人知道任何体面的工作吗 在我的特殊情况下,我试图定义我希望具有特定布局的数据结构(枚举类型和字符串数组)。我想我可以将这些内容粘贴到一个扩展名被格式化程序忽略的文件中,并在适

CDT代码格式化程序有一个相当不错的选项选择,但它似乎没有一个允许用户告诉它忽略代码块的特性。Java代码格式化程序中存在此功能:

// @formatter:off
... // code that should not be formatted
// @formatter:on
这个功能是否存在,而我只是不知道,或者有人知道任何体面的工作吗


在我的特殊情况下,我试图定义我希望具有特定布局的数据结构(枚举类型和字符串数组)。

我想我可以将这些内容粘贴到一个扩展名被格式化程序忽略的文件中,并在适当的情况下包含此文件。我尝试了这个方法,它成功了——数据结构由索引器获取(即自动完成工作)。不过,如果有一个与Java“@formatter:…”语法等价的语法就好了。

据我所知,答案是否定的,这样的功能并不存在。不过,您可能可以使用SDK实现这样的功能。请注意,根据我的经验,文档非常不完整,很难找到愿意帮助您填补漏洞的Eclipse开发人员。但是由于该特性存在于java格式化程序中,并且它是一个开源产品,也许您可以将逻辑移植到C++格式器上。 您还可以避免格式化整个文件,而只通过选择格式化。

使用Astyle(艺术风格)格式化程序,它远优于Eclipse CDT内置格式化程序,并具有您所需的功能:

例如:

#include <iostream>

int main(int argc, char** argv)
{
// *INDENT-OFF*
std::cout<<"hello world"<<'\n';
// *INDENT-ON*
}
月食:

“运行”菜单-->外部工具-->外部工具配置。。。添加新的“程序”,并在配置窗口中:

  • 位置:/usr/bin/astyle(使用whereis或locate检查此项)

  • 工作目录:${project_loc}

  • 参数:${selected_resource_loc}

在同一窗口中,刷新选项卡:

  • 勾选完成后刷新资源

  • 勾选“所选资源”

同一窗口,公共选项卡:

  • 显示在收藏夹菜单中,勾选“外部工具”

如果您使用的是OS X或Linux(我没有检查Windows,但它可能受支持),您可以使用
clangformat
CppStyle

clangformat
是一个格式化程序实用程序,随
clang
提供,它支持C/C++/ObjC代码中的开/关注释
//clangformat on
//clangformat off
。在这里可以找到build
Clang
及其实用工具的介绍。 您不需要在系统上安装整个
Clang
LLVM
文件。因为
clangformat
是一个独立的程序,在没有
clang
的情况下工作。旧版本不支持开/关注释,因此请使用3.7版(自2015年2月起可从SVN获得)

CppStyle
是一个Eclipse插件,它使我们能够使用Eclipse CDT中的
clang格式。


仅供参考。这里是CDT Bugzilla中相同的特性请求。该功能将来可能会得到官方支持,但目前使用
clangformat
Astyle
似乎是更好的解决方案

是的,您可以这样做,因为CDT从9.7版开始就支持此功能。这种行为与JDT完全相同。

这种方法的另一个缺点是重构(特别是重命名)不起作用。此外,数据结构的更改似乎不会自动获取,因此需要一个清理和重建周期。我完全忘记了astyle!如果您从这里添加一些示例用法,我将接受这个答案:好的,我将提供一些设置建议:当您在eclipse中将此作为外部工具添加时,使用参数部分中的“${resource\u loc}”将其配置为格式化当前打开的文件。
/*INDENT-OFF*
对任何人都有效吗?在我的astyle v2.03中,它只是被忽略了。谢谢!我在这里发现了跟踪此修复的错误:这些天,我的团队使用的是
clangformat
,它对我们很有效,非常灵活,可以适应我们想要的样式。另外,作为参考,标签如OP.
/@formatter:off
/@formatter:on
中所述。注意:之前接受的答案是使用Astyle,因为在CDT本机支持此功能之前提出了此问题。从那时起,已经添加了支持,@greywolf82最近添加了一个带有此信息的答案,因此接受的答案被更改为指向他的答案。谢谢@greywolf82!(使用Astyle、clang格式或其他格式工具仍然是一种合理的选择。)
--suffix=none
--style=allman
--indent=tab=4
--max-code-length=70
--close-templates
--keep-one-line-blocks
--break-elseifs
--break-closing-brackets
--align-reference=type
--align-pointer=type
--indent-classes
--indent-modifiers
--indent-switches
--indent-cases
--indent-labels
--indent-col1-comments
--min-conditional-indent=0
--pad-oper
--pad-header
--unpad-paren