如果纯函数调用“非纯”函数,GCC是否会发出警告/错误?

时间:2017-11-28 11:38:07

标签: c gcc function-pointers compiler-warnings pure-function

我发现了gcc属性pure,并且喜欢使用它,因为在我看来,在我的界面中添加其他信息(与const关键字一起),以及如果我已正确理解其目的,将允许我的编译器更轻松地优化我的代码。

但在我看来,纯函数应该只能使用纯粹的函数。是否有一个特定的警告可以启用以检查pure函数仅使用pure函数(另外,给纯函数的函数指针参数也是纯函数)?我认为,第二点可能更棘手。

使用-Wall -Wextra -pedantic-errors,我无法发出任何警告。

也许我做错了,但我总是喜欢让我的工具强制执行我决定申请的纪律,而不是仅仅指望我明天早上不会忘记它的事实。

修改

Can a compiler automatically detect pure functions without the type information about purity?是相关的,但在我看来,我的问题更简单(虽然我可能是错的):它不是关于检测函数是否是纯粹没有开发人员提供的信息,但检查它内部调用的函数标记方式相同。换句话说,通过(理论)调用堆栈检查“纯度”的一致性,对被调用函数应用某种类型检查。

1 个答案:

答案 0 :(得分:0)

根据GCC documentation(强调我的):

  

6.31声明函数属性

     

在GNU C中, 可以使用函数属性来声明某些内容   关于在程序中调用的函数 ,它们有助于编译器   优化通话......

如果声明某个函数是pure 通知编译器它可以对此做出某些假设功能

正如评论中所述:“如果编译器能够弄明白,为什么你需要使用该属性?”