C ++如何警告函数声明和定义中参数名称之间的差异
C++ How to warning about difference between argument names in function declaration and definition
有没有办法在函数声明与其定义之间的参数名称不匹配时收到警告?
声明
double divide(int a, int b);
定义
double divide(int b, int a)
{
return a / b;
}
对于使用函数 divide
的用户来说,结果是 a / b 而不是 b / a。
我知道,编译器不能这样做,但是有没有一些静态分析工具可以做到这一点?如果有,是哪些?
编译器不关心你的声明中的参数名称,你甚至可以写void foo(int, int);
,所以没有不匹配,也没有这样的警告。如果您出于某种原因发现这种不匹配令人困惑,只需在声明中省略参数名称即可。
您可以使用 clang-tidy。称它为编译器有点牵强,但也许有一个选项可以让 clang 发出 clang-tidy 警告。您想要的具体选项是 readability-inconsistent-declaration-parameter-name
.
您是只对检查现有代码感兴趣,还是希望确保代码避免此问题并愿意重新设计接口?
后一种情况:
如果您有许多相同类型的参数,那么不一致可能会成为一个问题(我见过比您的示例更糟糕的情况):
void foo(bool fast, bool small, bool trivial);
foo(true, false, false);
您要求的是一种确保 foo 的声明和定义一致的方法 - 但您忽略了调用和声明之间的不一致。
另一种解决方案是使用 setRoutines 创建参数结构。类似于:
struct FooArg {
bool fast, small, trivial;
FooArg &setFast(bool fast_) {fast=fast_;return *this;};
...
};
void foo(FooArg const&);
foo(FooArg().setFast(true).setSmall(false)...);
这样就可以避免声明、定义和调用之间的不一致,但必须更加冗长。
(我确信在某处有关于此技术的答案。)
有没有办法在函数声明与其定义之间的参数名称不匹配时收到警告?
声明
double divide(int a, int b);
定义
double divide(int b, int a)
{
return a / b;
}
对于使用函数 divide
的用户来说,结果是 a / b 而不是 b / a。
我知道,编译器不能这样做,但是有没有一些静态分析工具可以做到这一点?如果有,是哪些?
编译器不关心你的声明中的参数名称,你甚至可以写void foo(int, int);
,所以没有不匹配,也没有这样的警告。如果您出于某种原因发现这种不匹配令人困惑,只需在声明中省略参数名称即可。
您可以使用 clang-tidy。称它为编译器有点牵强,但也许有一个选项可以让 clang 发出 clang-tidy 警告。您想要的具体选项是 readability-inconsistent-declaration-parameter-name
.
您是只对检查现有代码感兴趣,还是希望确保代码避免此问题并愿意重新设计接口?
后一种情况:
如果您有许多相同类型的参数,那么不一致可能会成为一个问题(我见过比您的示例更糟糕的情况):
void foo(bool fast, bool small, bool trivial);
foo(true, false, false);
您要求的是一种确保 foo 的声明和定义一致的方法 - 但您忽略了调用和声明之间的不一致。
另一种解决方案是使用 setRoutines 创建参数结构。类似于:
struct FooArg {
bool fast, small, trivial;
FooArg &setFast(bool fast_) {fast=fast_;return *this;};
...
};
void foo(FooArg const&);
foo(FooArg().setFast(true).setSmall(false)...);
这样就可以避免声明、定义和调用之间的不一致,但必须更加冗长。 (我确信在某处有关于此技术的答案。)