我发现了gcc属性pure
,并且喜欢使用它,因为在我看来,在我的界面中添加其他信息(与const
关键字一起),以及如果我已正确理解其目的,将允许我的编译器更轻松地优化我的代码。
但在我看来,纯函数应该只能使用纯粹的函数。是否有一个特定的警告可以启用以检查pure
函数仅使用pure
函数(另外,给纯函数的函数指针参数也是纯函数)?我认为,第二点可能更棘手。
使用-Wall -Wextra -pedantic-errors
,我无法发出任何警告。
也许我做错了,但我总是喜欢让我的工具强制执行我决定申请的纪律,而不是仅仅指望我明天早上不会忘记它的事实。
Can a compiler automatically detect pure functions without the type information about purity?是相关的,但在我看来,我的问题更简单(虽然我可能是错的):它不是关于检测函数是否是纯粹没有开发人员提供的信息,但检查它内部调用的函数标记方式相同。换句话说,通过(理论)调用堆栈检查“纯度”的一致性,对被调用函数应用某种类型检查。
答案 0 :(得分:0)
根据GCC documentation(强调我的):
6.31声明函数属性
在GNU C中, 可以使用函数属性来声明某些内容 关于在程序中调用的函数 ,它们有助于编译器 优化通话......
如果你声明某个函数是pure
,你 通知编译器它可以对此做出某些假设功能
正如评论中所述:“如果编译器能够弄明白,为什么你需要使用该属性?”