我正在学习gcc的cleanup attribute,并学习如何调用函数以在变量超出范围时运行,我不明白你为什么可以使用“cleanup”这个词有或没有下划线。 和下划线的文档或文档在哪里?gcc预编译器指令__attribute__((__cleanup__))vs((cleanup))(with vs without underscores?)
上述GCC的文档显示它是这样的:
__attribute__ ((cleanup(cleanup_function)))
然而,大多数代码示例我读,显示它是这样的:
__attribute__ ((__cleanup__(cleanup_function)))
例:
- http://echorand.me/site/notes/articles/c_cleanup/cleanup_attribute_c.html
- http://www.nongnu.org/avr-libc/user-manual/atomic_8h_source.html
请注意,第一个示例链接状态它们是相同的,当然编码它证明了这一点,但他是如何知道这最初?这个是从哪里来的?
为什么区别? __cleanup__
在哪里定义或记录,而不是cleanup
?
我的根本问题在于,我不知道是什么我不知道的事实,因此我想揭露一些我未知的未知的,使他们成为已知的未知,直到我可以学习他们,使他们知道知道。
我的想法是,也许有一些全球适用的原则gcc预处理器指令,您可以在任何一个之前或之后任意添加下划线? - 或者也许只有其中一些? - 或者它可能以某种方式修改预处理器指令或属性,并且有些情况下一个方法(有或没有额外的下划线)比另一个方法更受欢迎?
您提供的第一个链接提示(如果不是彻底的状态)“清理”和“__cleanup__”是相同的。此外,鉴于您已将此标签标记为C++,我还要提到它的最佳目的是在C样式代码中使用RAII语义。一般来说,在C++中,你应该把需要清理的东西包装到一个具有析构函数的类中(并且通过C++ 11或更新版本的三条规则或五条规则 - 你也需要构造函数和/或移动操作员)。 – inetknght
谢谢。我多说了一下我的问题。第一个链接确实说明它们是相同的,但是我想知道这对于我使用的其他属性意味着什么....是否始终存在同一事物的多个选项?这个人怎么知道他们是一样的?当然,必须存在一些差异的原因。查看我更新的答案,了解我的一些惊喜。 –