|
1
58
我们使用宏来明确指示什么时候未使用:
在您的示例中,您将有:
这样(a)生产构建成功,(b)代码中很明显变量未使用 ,并不是说它只是被遗忘了。这在不使用函数的参数时特别有用。 |
|
|
2
32
我无法给出比这个更好的答案,解决这个问题,还有更多: Stupid C++ Tricks: Adventures in assert
|
|
|
3
20
从C++17开始,变量可以用属性修饰。
https://en.cppreference.com/w/cpp/language/attributes/maybe_unused 详情请参阅。
这比这个好
|
|
|
4
9
您可以创建另一个宏,以避免使用临时变量:
|
|
5
8
这种情况意味着在发布模式下,您确实需要:
但是
由
(1),
比
所以,简而言之,我的答案是:不要这样写代码:) 更新(1): 你要的是关于这个项目的推荐人 命令查询分离原则 . Wikipedia 这本书内容丰富。我在一本书中读到了这种设计技巧 Object Oriented Software Construction, 2nd Editon 伯特兰·迈耶。 更新(2): 合同设计 ,将具有相关数量的功能 ,因此在“Empty()”之后,对象将是“IsEmpty()”,而在“Encode()”之后,消息字符串将是“IsEncoded()”,无需检查。以同样的方式,并且在某种程度上是对称的,在每次调用过程“X()”之前都不调用特殊函数“IsXFeasible()”;因为你通常通过设计知道你在调用时满足了X的先决条件。 |
|
|
6
4
您可以使用:
并根据需要实现检查(bool)功能。它可以使用assert,也可以抛出特定的异常,写入日志文件或控制台,在debug和release中有不同的实现,或者所有这些的组合。 |
|
|
7
3
|
|
|
8
2
这是assert的一个错误用法,IMHO。Assert并不是一个错误报告工具,它是用来断言前提条件的。若结果并没有在其他地方使用,那个么它并不是一个先决条件。 |
|
|
9
2
另外,不管怎么说,在函数内部更有意义,因为它创建了一个具有自己的前置和后置条件的自包含单元。 如果函数返回一个值,那么无论如何,您都应该在释放模式下对此返回值进行某种错误检查。因此,它不应该是一个未引用的变量。 编辑,但在这种情况下,post条件应为X(请参见注释): 我强烈不同意这一点,应该能够从输入参数确定post条件,如果它是成员函数,则可以确定任何对象状态。如果全局变量修改函数的输出,则应重新构造函数。 |
|
|
10
2
评价的
. 例如,如果你只是做一个变量检查,那可能没什么大不了的。但是如果在断言检查中调用某个函数,比如
你真正需要的不仅仅是警告,更重要的是- 非评价 仅调试检查表达式的。这可以通过我从一个专门的 Assert 图书馆:
此外,我希望静态分析器可以警告使用这种方法的“表达式的结果总是恒定的”(或类似的东西)。我已经用clang、VS2013、VS2015静态分析工具对此进行了测试,但没有收到类似的警告。 |
|
|
11
2
一般来说,使用这些东西时,要小心,不可能用不同的语言构建不同的翻译单元
|
|
|
12
1
当然,您可以使用宏来控制断言定义,例如“\u assert”。因此,您可以这样做:
|
|
13
0
但是您应该考虑使用assert的一个版本,该版本在运行时执行一些有用的操作,例如将描述性错误记录到可以从生产环境检索的文件中。 |
|
|
14
0
我会使用以下方法:
|
|
|
15
0
如果此代码在函数中,则执行操作并返回结果:
|
|
|
16
0
|
|
|
mozcelikors · 以前未调用函数时给出错误 8 年前 |
|
|
A.Joly · 虽然类型比较在终端中有效,但断言在脚本中无效 9 年前 |
|
|
The Grey Ghost · 线程正确性的断言或注释 10 年前 |