ReSharper 2025.2 Help

EditorConfig 属性(适用于 C++):换行与换行规则

常规

在文件末尾换行

属性名称:

insert_final_newlinecpp_insert_final_newline

可能的值:

true | false

放置在新行上

在复合语句后将 'else' 放在新行上

属性名称:

else 前换行else 前换行

可能的值:

true | false

示例:

true

if (true) { foo(); } else { foo(); }

false

if (true) { foo(); } else { foo(); }

在复合语句后将 'while' 放在新行上

属性名称:

while 前换行while 前换行

可能的值:

true | false

示例:

true

do { foo(); } while (true);

false

do { foo(); } while (true);

在复合语句后将 'catch' 放在新行上

属性名称:

[resharper_]cpp_new_line_before_catch[resharper_]new_line_before_catch

可能的值:

true|false

示例:

true

try { foo(); } catch (...) { foo(); }

false

try { foo(); } catch (...) { foo(); }

在单条嵌入式语句中换行

属性名称:

简单嵌入语句样式简单嵌入语句样式

可能的值:

  • 不更改: 不更改

  • on_single_line: 强制放在单行

  • line_break: 强制换行

示例:

不更改

if (true) foo(); else foo();

on_single_line

if (true) foo(); else foo();

line_break

if (true) foo(); else foo();

在简单 'case' 语句中换行

属性名称:

简单 case 语句样式简单 case 语句样式

可能的值:

  • 不更改: 不更改

  • on_single_line: 强制放在单行

  • line_break: 强制换行

示例:

不更改

switch (a) { case b: break; case c: break; }

on_single_line

switch (a) { case b: break; case c: break; }

line_break

switch (a) { case b: break; case c: break; }

在成员函数定义返回值类型后换行

属性名称:

函数定义返回类型样式函数定义返回类型样式

可能的值:

  • 不更改: 不更改

  • on_single_line: 强制放在单行

  • line_break: 强制换行

示例:

不更改

struct Boo { int* foo() { return 0; } char* bar() { return 0; } };

on_single_line

struct Boo { int* foo() { return 0; } char* bar() { return 0; } };

line_break

struct Boo { int* foo() { return 0; } char* bar() { return 0; } };

在顶层函数定义返回值类型后换行

属性名称:

顶级函数定义返回类型样式顶级函数定义返回类型样式

可能的值:

  • 不更改: 不更改

  • on_single_line: 强制放在单行

  • line_break: 强制换行

示例:

不更改

int* foo() { return 0; } char* bar() { return 0; }

on_single_line

int* foo() { return 0; } char* bar() { return 0; }

line_break

int* foo() { return 0; } char* bar() { return 0; }

在成员函数声明返回值类型后换行

属性名称:

函数声明返回类型样式函数声明返回类型样式

可能的值:

  • 不更改: 不更改

  • on_single_line: 强制放在单行

  • line_break: 强制换行

示例:

不更改

struct Boo { int* foo(); char* bar(); };

on_single_line

struct Boo { int* foo(); char* bar(); };

line_break

struct Boo { int* foo(); char* bar(); };

在顶层函数声明返回值类型后换行

属性名称:

顶级函数声明返回类型样式顶级函数声明返回类型样式

可能的值:

  • 不更改: 不更改

  • on_single_line: 强制放在单行

  • line_break: 强制换行

示例:

不更改

int* foo(); char* bar();

on_single_line

int* foo(); char* bar();

line_break

int* foo(); char* bar();

在模板声明的 template<...> 后换行

属性名称:

模板声明换行模板声明换行

可能的值:

  • 不更改: 不更改

  • on_single_line: 强制放在单行

  • line_break: 强制换行

示例:

不更改

template <class T> void foo(); template <class T> void bar();

on_single_line

template <class T> void foo(); template <class T> void bar();

line_break

template <class T> void foo(); template <class T> void bar();

在 init 语句之后换行

属性名称:

初始化语句后换行初始化语句后换行

可能的值:

  • 不更改: 不更改

  • on_single_line: 强制放在单行

  • line_break: 强制换行

示例:

不更改

if (bool b = true; b) foo();

on_single_line

if (bool b = true; b) foo();

line_break

if (bool b = true; b) foo();

在 requires 子句前换行

属性名称:

requires 子句前换行requires 子句前换行

可能的值:

  • 不更改: 不更改

  • on_single_line: 强制放在单行

  • line_break: 强制换行

示例:

不更改

template <bool T> requires T void foo(); template <bool T> requires T void bar();

on_single_line

template <bool T> requires T void foo(); template <bool T> requires T void bar();

line_break

template <bool T> requires T void foo(); template <bool T> requires T void bar();

在成员初始值设定项列表中的冒号前换行

属性名称:

成员初始化列表样式成员初始化列表样式

可能的值:

  • 不更改: 不更改

  • on_single_line: 强制放在单行

  • line_break: 强制换行

示例:

不更改

struct X { X(): x(0) { } X(int x) : x(x) { } int x; };

on_single_line

struct X { X(): x(0) { } X(int x): x(x) { } int x; };

line_break

struct X { X() : x(0) { } X(int x) : x(x) { } int x; };

在成员初始值设定项列表中的冒号后换行

属性名称:

成员初始化列表中冒号后换行成员初始化列表中冒号后换行

可能的值:

  • 不更改: 不更改

  • on_single_line: 强制放在单行

  • line_break: 强制换行

示例:

不更改

struct X { X(): x(0) { } X(int x) : x(x) { } int x; };

on_single_line

struct X { X(): x(0) { } X(int x) : x(x) { } int x; };

line_break

struct X { X(): x(0) { } X(int x) : x(x) { } int x; };

在尾随返回值类型中的 '->' 前断行

属性名称:

尾随返回类型中解引用前换行尾随返回类型中解引用前换行

可能的值:

  • 不更改: 不更改

  • on_single_line: 强制放在单行

  • line_break: 强制换行

示例:

不更改

auto foo() -> int { }

on_single_line

auto foo() -> int { }

line_break

auto foo() -> int { }

在尾随返回值类型中的 '->' 后断行

属性名称:

尾随返回类型中解引用后换行尾随返回类型中解引用后换行

可能的值:

  • 不更改: 不更改

  • on_single_line: 强制放在单行

  • line_break: 强制换行

示例:

不更改

auto foo() -> int { }

on_single_line

auto foo() -> int { }

line_break

auto foo() -> int { }

在成员初始值设定项列表中的逗号前换行

属性名称:

成员初始化列表中逗号前换行成员初始化列表中逗号前换行

可能的值:

true | false

示例:

true

struct MyStruct { MyStruct() : first(f) , second(s) { } };

false

struct MyStruct { MyStruct() : first(f), second(s) { } };

在成员初始值设定项列表中的逗号后换行

属性名称:

成员初始化列表中逗号后换行成员初始化列表中逗号后换行

可能的值:

true | false

示例:

true

struct MyStruct { MyStruct() : first(f), second(s) { } };

false

struct MyStruct { MyStruct() : first(f), second(s) { } };

允许 C++/CLI 泛型约束在同一行中

属性名称:

将类型约束置于同一行将类型约束置于同一行

可能的值:

true | false

示例:

true

generic<class T> class C where T : IEnumerable{};

false

generic<class T> class C where T : IEnumerable{};

换行

保留现有换行符

属性名称:

保留用户换行符保留用户换行符

可能的值:

true | false

示例:

格式化前

格式化后,true

int var = condition ? SomeFunc1() : SomeFunc2();
int var = condition ? SomeFunc1() : SomeFunc2();

格式化前

格式化后,false

int var = condition ? SomeFunc1() : SomeFunc2();
int var = condition ? SomeFunc1() : SomeFunc2();

硬换行于

属性名称:

max_line_lengthcpp_max_line_length

可能的值:

一个整数

首选在 ',' 前换行

属性名称:

逗号前换行逗号前换行

可能的值:

true | false

示例:

true

CallMethod(arg1, arg2, arg3 , arg4, arg5, arg6 , arg7);

false

CallMethod(arg1, arg2, arg3, arg4, arg5, arg6, arg7);

首选在基子句中的 ',' 前换行

属性名称:

基类子句中逗号前换行基类子句中逗号前换行

可能的值:

true | false

示例:

true

class Derived : BaseClass, I1 , I2, I3, I4 { }

false

class Derived : BaseClass, I1, I2, I3, I4 { }

将三元表达式换行

属性名称:

三元表达式换行样式三元表达式换行样式

可能的值:

  • wrap_if_long :简单换行

  • chop_if_long :如果过长或多行则分割

  • chop_always :始终分割

示例:

wrap_if_long

myField = someCondition ? true : false;

chop_if_long

myField = someCondition ? true : false;

chop_always

myField = someCondition ? true : false;

首选在三元表达式中的 '?' 和 ':' 前换行

属性名称:

三元运算符前换行三元运算符前换行

可能的值:

true | false

示例:

true

return hereGoesSomeBoolExpression ? returnThisIfTrue : returnThatIfFalse;

false

return hereGoesSomeBoolExpression ? returnThisIfTrue : returnThatIfFalse;

首选在 ':' 前换行

属性名称:

冒号前换行冒号前换行

可能的值:

true | false

示例:

true

class Derived : BaseClass, I1, I2, I3, I4 { }

false

class Derived : BaseClass, I1, I2, I3, I4 { }

首选在第一个 C++/CLI 泛型约束前换行

属性名称:

[resharper_]cpp_wrap_before_first_type_parameter_constraint[resharper_]wrap_before_first_type_parameter_constraint

可能的值:

true|false

示例:

true

generic<class T1, T2, T3> class C where T1: I1 where T2: I2 where T3 : ref class { };

false

generic<class T1, T2, T3> class C where T1: I1 where T2: I2 where T3 : ref class { };

将多个 C++/CLI 泛型约束换行

属性名称:

[resharper_]cpp_wrap_multiple_type_parameter_constraints_style[resharper_]wrap_multiple_type_parameter_constraints_style

可能的值:

  • wrap_if_long :简单换行

  • chop_if_long :如果过长或多行则分割

  • chop_always :始终分割

示例:

wrap_if_long

generic<class T1, T2, T3> class C where T1: I1 where T2: I2 where T3 : ref class { };

chop_if_long

generic<class T1, T2, T3> class C where T1: I1 where T2: I2 where T3 : ref class { };

chop_always

generic<class T1, T2, T3> class C where T1: I1 where T2: I2 where T3 : ref class { };

将枚举定义换行

属性名称:

[resharper_]cpp_wrap_enumeration_style[resharper_]wrap_enumeration_style

可能的值:

  • wrap_if_long :简单换行

  • chop_if_long :如果过长或多行则分割

  • chop_always :始终分割

示例:

wrap_if_long

enum { ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN };

chop_if_long

enum { ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN };

chop_always

enum { ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN };

将带大括号的初始值设定项列表换行

属性名称:

[resharper_]cpp_wrap_braced_init_list_style[resharper_]wrap_braced_init_list_style

可能的值:

  • wrap_if_long :简单换行

  • chop_if_long :如果过长或多行则分割

  • chop_always :始终分割

示例:

wrap_if_long

std::map<int, std::string> m = { {1, "a"}, {2, {'a', 'b', 'c'}}, {3, s1}, {4, s2} };

chop_if_long

std::map<int, std::string> m = { {1, "a"}, {2, {'a', 'b', 'c'}}, {3, s1}, {4, s2} };

chop_always

std::map<int, std::string> m = { { 1, "a" }, { 2, { 'a', 'b', 'c' } }, { 3, s1 }, { 4, s2 } };

将基类列表换行

属性名称:

[resharper_]cpp_wrap_base_clause_style[resharper_]wrap_base_clause_style

可能的值:

  • wrap_if_long :简单换行

  • chop_if_long :如果过长或多行则分割

  • chop_always :始终分割

示例:

wrap_if_long

class Derived : BaseClass, I1, I2, I3, I4 { }

chop_if_long

class Derived : BaseClass, I1, I2, I3, I4 { }

chop_always

class Derived : BaseClass, I1, I2, I3, I4 { }

将构造函数初始值设定项换行

属性名称:

[resharper_]cpp_wrap_ctor_initializer_style[resharper_]wrap_ctor_initializer_style

可能的值:

  • wrap_if_long :简单换行

  • chop_if_long :如果过长或多行则分割

  • chop_always :始终分割

示例:

wrap_if_long

struct XXX { X(): x(0), y(0), z(0) { } XXX(int x, int y, int z) : x(x), y(y), z(z) { } int x; int y; int z; };

chop_if_long

struct XXX { X(): x(0), y(0), z(0) { } XXX(int x, int y, int z) : x(x), y(y), z(z) { } int x; int y; int z; };

chop_always

struct XXX { X(): x(0), y(0), z(0) { } XXX(int x, int y, int z) : x(x), y(y), z(z) { } int x; int y; int z; };

将形参换行

属性名称:

[resharper_]cpp_wrap_parameters_style[resharper_]wrap_parameters_style

可能的值:

  • wrap_if_long :简单换行

  • chop_if_long :如果过长或多行则分割

  • chop_always :始终分割

示例:

wrap_if_long

void SomeMethod(int p1, int p2, int p3, int p4) { }

chop_if_long

void SomeMethod(int p1, int p2, int p3, int p4) { }

chop_always

void SomeMethod(int p1, int p2, int p3, int p4) { }

首选在声明中的 '(' 前换行

属性名称:

[resharper_]cpp_wrap_before_declaration_lpar[resharper_]wrap_before_declaration_lpar

可能的值:

true|false

示例:

true

void SomeMethod (int p1, int p2, int p3, int p4) { }

false

void SomeMethod(int p1, int p2, int p3, int p4) { }

首选在声明中的 '(' 后换行

属性名称:

[resharper_]cpp_wrap_after_declaration_lpar[resharper_]wrap_after_declaration_lpar

可能的值:

true|false

示例:

true

void SomeMethod( int p1, int p2, int p3, int p4) { }

false

void SomeMethod(int p1, int p2, int p3, int p4) { }

首选在声明中的 ')' 前换行

属性名称:

[resharper_]cpp_wrap_before_declaration_rpar[resharper_]wrap_before_declaration_rpar

可能的值:

true|false

示例:

true

void SomeMethod(int p1, int p2, int p3, int p4 ) { }

false

void SomeMethod(int p1, int p2, int p3, int p4) { }

将调用实参换行

属性名称:

[resharper_]cpp_wrap_arguments_style[resharper_]wrap_arguments_style

可能的值:

  • wrap_if_long :简单换行

  • chop_if_long :如果过长或多行则分割

  • chop_always :始终分割

示例:

wrap_if_long

CallMethod(arg1, arg2, arg3, arg4, arg5);

chop_if_long

CallMethod(arg1, arg2, arg3, arg4, arg5);

chop_always

CallMethod(arg1, arg2, arg3, arg4, arg5);

首选在调用中的 '(' 前换行

属性名称:

调用左括号前换行调用左括号前换行

可能的值:

true | false

示例:

true

CallMethod (arg1, arg2, arg3, arg4, arg5);

false

CallMethod(arg1, arg2, arg3, arg4, arg5);

首选在调用中的 '(' 后换行

属性名称:

调用左括号后换行调用左括号后换行

可能的值:

true | false

示例:

true

CallMethod( arg1, arg2, arg3, arg4, arg5);

false

CallMethod(arg1, arg2, arg3, arg4, arg5);

首选在调用中的 ')' 前换行

属性名称:

调用右括号前换行调用右括号前换行

可能的值:

true | false

示例:

true

CallMethod(arg1, arg2, arg3, arg4, arg5 );

false

CallMethod(arg1, arg2, arg3, arg4, arg5);

首选在初始值设定项列表中的 '{' 后换行

属性名称:

表达式左花括号后换行表达式左花括号后换行

可能的值:

true | false

示例:

true

map<int, string> m = { {1, "a"}, {2, {'a', 'b', 'c'}}, {3, s1}, {4, s2} };

false

map<int, string> m = {{1, "a"}, {2, {'a', 'b', 'c'}}, {3, s1}, {4, s2} };

首选在初始值设定项列表中的 '}' 前换行

属性名称:

表达式右花括号前换行表达式右花括号前换行

可能的值:

true | false

示例:

true

map<int, string> m = { {1, "a"}, {2, {'a', 'b', 'c'}}, {3, s1}, {4, s2} };

false

map<int, string> m = { {1, "a"}, {2, {'a', 'b', 'c'}}, {3, s1}, {4, s2}};
最后修改日期: 2025年 9月 27日