我发现了 gcc 属性pure
并喜欢使用它,因为在我看来,它是在我的界面中添加附加信息的好方法(除了const
关键字),如果我正确理解了它的用途,将允许我的编译器优化我的更轻松地编写代码。
但在我看来,纯函数应该只能使用本身是纯函数的函数。是否可以启用特定警告来检查pure
函数是否仅使用pure
函数(此外,赋予纯函数的函数指针参数也是纯函数)?我想第二点可能更棘手。
使用-Wall -Wextra -pedantic-errors
,我无法发出任何警告。
也许我做错了,但我总是更喜欢让我的工具执行我决定应用的纪律,而不是仅仅指望明天早上我不会忘记它。
编辑
编译器可以在没有关于纯度的类型信息的情况下自动检测纯函数吗?是相关的,但在我看来,我的问题要简单得多(尽管我可能错了):它不是关于在没有开发人员提供的信息的情况下检测一个函数是否是纯函数,而是检查它内部调用的函数是否被标记一样的方法。换句话说,通过对被调用函数应用某种类型检查,通过(理论上的)调用堆栈检查“纯度”的一致性。