@@ -2948,16 +2948,16 @@ ID_macro_typeid     :bulb: precompile suggestion
2948
2948
示例:
2949
2949
```
2950
2950
namespace U {
2951
- #define MyType int // Non-compliant
2951
+ #define Type int // Non-compliant
2952
2952
}
2953
2953
2954
2954
namespace V {
2955
- #define MyType long // Non-compliant
2955
+ #define Type long // Non-compliant
2956
2956
}
2957
2957
2958
- void foo(MyType ); // Unreliable
2958
+ void foo(Type ); // Unreliable
2959
2959
```
2960
- 例中 MyType 的最终定义是 long,第二个宏定义会覆盖第一个宏定义,这显然是不可靠的。
2960
+ 例中 Type 的最终定义是 long,第二个宏定义会覆盖第一个宏定义,这显然是不可靠的。
2961
2961
<br />
2962
2962
<br />
2963
2963
@@ -3082,7 +3082,7 @@ const char* foo() {
3082
3082
return M("x", "y"); // Non-compliant
3083
3083
}
3084
3084
```
3085
- 在早期标准中(如 ISO 9899:1990)这种情况是未定义的,而后续标准对其进行了约束 ,但 MSVC 等编译器不把这种问题视作编译错误 ,需要特别注意。
3085
+ 在早期标准( ISO 9899:1990)对这种情况没有明确定义,后续标准对其进行了约束 ,但 MSVC 等编译器至今仍不把这种问题视作编译错误 ,需要特别注意。
3086
3086
<br />
3087
3087
<br />
3088
3088
@@ -9037,13 +9037,12 @@ int foo() throw(Exception); // Non-compliant
9037
9037
应改为:
9038
9038
```
9039
9039
int foo() noexcept(false); // Compliant
9040
- int bar() noexcept; // Compliant
9041
9040
```
9042
9041
例外:
9043
9042
```
9044
9043
int bar() throw(); // Let it go?
9045
9044
```
9046
- 空的 throw 异常规格说明与 noexcept 等价,是一种惯用写法,可根据配置项放宽要求,本规则不建议使用 throw 关键字 。
9045
+ 空的 throw 异常规格说明与 noexcept 等价,是一种惯用写法,审计工具不妨通过配置决定是否放过这种方式 。
9047
9046
<br />
9048
9047
<br />
9049
9048
@@ -10580,7 +10579,7 @@ ID_complexInlineFunction     :bulb: function suggestion
10580
10579
10581
10580
<hr />
10582
10581
10583
- 不适合将函数声明为内联的情况 :
10582
+ 不适合将函数声明为内联函数的情况 :
10584
10583
- 行数超过指定限制
10585
10584
- 存在循环或异常处理语句
10586
10585
- 存在 switch 分枝语句
@@ -11325,7 +11324,7 @@ ID_for_simplification     :bulb: control suggestion
11325
11324
11326
11325
<hr />
11327
11326
11328
- 如果 for 迭代声明中的第 1 个和第 3 个表达式为空,应改为 while 循环,使代码更简洁。
11327
+ 如果 for 语句的第 1 个和第 3 个表达式为空,应改为 while 循环,使代码更简洁。
11329
11328
11330
11329
示例:
11331
11330
```
@@ -11336,7 +11335,7 @@ for (;condition;) // Non-compliant
11336
11335
while (condition) // Compliant
11337
11336
```
11338
11337
例外:
11339
- for (;;) 被当作一种无限循环的惯用方法可被排除 。
11338
+ for (;;) 被当作一种无限循环的惯用方法可不受本规则约束 。
11340
11339
<br />
11341
11340
<br />
11342
11341
@@ -11394,7 +11393,7 @@ ID_for_floatCounter     :fire: control warning
11394
11393
11395
11394
<hr />
11396
11395
11397
- 用于控制循环次数的变量称为循环变量 ,这种变量不应采用浮点类型,否则循环的次数难以控制。
11396
+ 用于控制循环次数的变量称为“循环变量” ,这种变量不应采用浮点类型,否则循环的次数难以控制。
11398
11397
11399
11398
由于浮点型变量的不精确性使浮点型变量不适用于控制循环次数,参见 ID\_ illFloatComparison。
11400
11399
@@ -11416,6 +11415,7 @@ for (size_t n = 0; n < 1000; n++) { // Compliant
11416
11415
....
11417
11416
}
11418
11417
```
11418
+ 这样循环的次数便与预期相符。
11419
11419
<br />
11420
11420
<br />
11421
11421
@@ -11436,7 +11436,7 @@ ID_for_counterChangedInBody     :fire: control warning
11436
11436
11437
11437
<hr />
11438
11438
11439
- 用于控制循环次数的变量称为循环变量 ,这种变量只应在 for 迭代声明的第 3 个表达式中被改变,否则陡增逻辑复杂度,且可读性较差。
11439
+ 用于控制循环次数的变量称为“循环变量” ,这种变量只应在 for 语句的第 3 个表达式中被改变,否则陡增逻辑复杂度,且可读性较差。
11440
11440
11441
11441
示例:
11442
11442
```
@@ -11492,21 +11492,15 @@ for 循环体应为复合语句,即使只包含一条语句。
11492
11492
11493
11493
示例:
11494
11494
```
11495
- int foo() {
11496
- int a = 0;
11497
- for (int i = 0; i < 10; i++) // Non-compliant
11498
- a += i;
11499
- return a;
11500
- }
11495
+ int a = 0;
11496
+ for (int i = 0; i < 10; i++) // Non-compliant
11497
+ a += i;
11501
11498
```
11502
11499
应改为:
11503
11500
```
11504
- int foo() {
11505
- int a = 0;
11506
- for (int i = 0; i < 10; i++) { // Compliant
11507
- a += i;
11508
- }
11509
- return a;
11501
+ int a = 0;
11502
+ for (int i = 0; i < 10; i++) { // Compliant
11503
+ a += i;
11510
11504
}
11511
11505
```
11512
11506
<br />
@@ -11735,7 +11729,7 @@ ID_do_suspiciousContinue     :fire: control warning
11735
11729
11736
11730
continue 语句和 break 语句在语义上是不同的,但在 do\- while(false) 中它们的功效是一样的。
11737
11731
11738
- 在 do\- while(false) 的循环体中如果既有 break 语句又有 continue 语句,那么 continue 语句被误用的可能性较大。
11732
+ 在 do\- while(false) 的循环体中如果既有 break 语句又有 continue 语句,continue 语句被误用的可能性较大。
11739
11733
11740
11734
示例:
11741
11735
```
@@ -15307,12 +15301,12 @@ for (a = 0, b = 0; a < 100; a++, b++) { // let it go?
15307
15301
....
15308
15302
}
15309
15303
```
15310
- 在 for 迭代声明中的第 1 个和第 3 个表达式中使用逗号表达式为惯用方式,但这种方式并不值得提倡,审计工具不妨通过配置决定是否放过这种方式。
15304
+ 在 for 语句的第 1 个和第 3 个表达式中使用逗号表达式为惯用方式,但这种方式并不值得提倡,审计工具不妨通过配置决定是否放过这种方式。
15311
15305
<br />
15312
15306
<br />
15313
15307
15314
15308
#### 配置
15315
- allowCommaExpressionInForIteration:为 true 时放过 for 迭代声明中的逗号表达式
15309
+ allowCommaExpressionInForIteration:为 true 时放过 for 语句中的逗号表达式
15316
15310
<br />
15317
15311
15318
15312
#### 参考
0 commit comments