【发布时间】:2017-02-02 03:27:01
【问题描述】:
GCC 可以使用标志 -Wsuggest-attribute=pure 和 -Wsuggest-attribute=const 为属性 pure 和属性 const 建议函数。
许多函数除了返回值之外没有任何影响,它们的返回值仅取决于参数和/或全局变量。这样的函数可以像算术运算符一样进行公共子表达式消除和循环优化。这些函数应该用纯属性声明。
但是,如果您将__attribute__((__pure__)) 附加到与上述描述不匹配且确实有副作用的函数上,会发生什么情况?仅仅是函数被调用的次数少于您希望的次数,还是可能会产生未定义的行为或其他类型的严重问题?
__attribute__((__const__)) 也同样严格——文档指出:
基本上这只是比下面的纯属性稍微严格的类,因为函数不允许读取全局内存。
但是如果将__attribute__((__const__)) 附加到访问全局内存的函数,实际上会发生什么?
我更喜欢在 GCC / G++ 范围内解释实际可能场景的技术答案,而不是在提及未定义行为时出现的通常的“nasal demons”挥手。
【问题讨论】:
-
请确保如果您对编译器撒谎,它会得到自己的回报。
-
@Jonathan Leffler 提醒我 Babbage 引用关于人们询问他的“引擎”是否会在所问问题错误时给出正确答案。
标签: c++ c gcc g++ pure-function