2

我发现了 gcc 属性pure并喜欢使用它,因为在我看来,它是在我的界面中添加附加信息的好方法(除了const关键字),如果我正确理解了它的用途,将允许我的编译器优化我的更轻松地编写代码。

但在我看来,纯函数应该只能使用本身是纯函数的函数。是否可以启用特定警告来检查pure函数是否仅使用pure函数(此外,赋予纯函数的函数指针参数也是纯函数)?我想第二点可能更棘手。

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

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

编辑

编译器可以在没有关于纯度的类型信息的情况下自动检测纯函数吗?是相关的,但在我看来,我的问题要简单得多(尽管我可能错了):它不是关于在没有开发人员提供的信息的情况下检测一个函数是否是纯函数,而是检查它内部调用的函数是否被标记一样的方法。换句话说,通过对被调用函数应用某种类型检查,通过(理论上的)调用堆栈检查“纯度”的一致性。

4

1 回答 1

0

根据GCC 文档(强调我的):

6.31 声明函数的属性

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

如果声明一个函数是pure就是在通知编译器它可以对该函数做出某些假设。

正如评论中所说:“如果编译器可以弄清楚,为什么你需要使用该属性?”

于 2017-11-28T14:45:50.987 回答