最近,由于组合拼写错误,逗号操作符,默认值,我偶然发现了一个错误.一个术语有很多括号和逗号.一个逗号被放置了一个括号太远了.该术语仍然是有效的C++代码,但返回的值是错误的.在简化版本中,错误看起来像这样:
int intValue = MyString.toInt(),16;
Run Code Online (Sandbox Code Playgroud)
该方法toInt具有number-base的默认参数(默认值为10).变量intValue总是16.
所以问题是,有没有任何样式指南规则来避免这样的错误或c ++检查器/编译器规则来帮助在代码中找到这样的错误?
编辑
好的,我已经改变了一些代码以使逗号更有意义:
char * MyString("0x42");
int intValue = stringToInt(MyString),16;
Run Code Online (Sandbox Code Playgroud)
PS请不要责怪我不使用std :: string和stream.该代码仅用于简化演示.:-)
对于GCC,-Wunused-value在这种情况下应该发出警告,因为MyString.toInt()没有使用返回值.该标志应有助于避免大多数此类错误.要实际获取警告,可能需要将该__attribute__ ((warn_unused_result))属性添加到toInt方法中.
在任何情况下,如图所示,简化示例导致"数字常量之前的预期非限定id"编译错误,除非括号添加如下 int intValue = (MyString.toInt(),16);