gpt4 book ai didi

macros - gcc 预编译器指令 __attribute__ ((__cleanup__)) vs ((cleanup)) (带下划线还是不带下划线?)

转载 作者:行者123 更新时间:2023-12-02 05:48:54 32 4
gpt4 key购买 nike

我正在学习 gcc 的 cleanup attribute ,并了解当变量超出范围时它如何调用要运行的函数,我不明白为什么你可以使用带或不带下划线的“清理”一词。 下划线的版本的文档或文档在哪里?

上面的 gcc 文档是这样显示的:

__attribute__ ((cleanup(cleanup_function)))

然而,我读过的大多数代码示例都是这样显示的:

__attribute__ ((__cleanup__(cleanup_function)))

例如:

请注意,第一个示例链接声明它们是相同的,当然编码证明了这一点,但他最初是怎么知道的?这是从哪里来的?

为什么不同? __cleanup__ 在哪里定义或记录,而不是 cleanup

我的根本问题在于,我不知道我不知道什么,因此我试图揭露我的一些未知的未知,使它们成为已知的未知,直到我可以研究它们并使它们广为人知。

我的想法是,也许 gcc 预处理器指令有一些全局适用的原则,您可以在其中任意指令之前或之后任意添加下划线? -- 或者也许只是其中的一部分? -- 或者它可能以某种方式修改了预处理器指令或属性,并且在某些情况下,一种方法(带或不带额外下划线)优于另一种方法?

最佳答案

您可以定义一个宏cleanup,因为它不是为编译器保留的名称。您不能定义一个名为 __cleanup__ 的程序。这保证了您使用 __cleanup__ 的代码不受其他代码的影响(当然前提是其他代码的行为正常)。

关于macros - gcc 预编译器指令 __attribute__ ((__cleanup__)) vs ((cleanup)) (带下划线还是不带下划线?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32785259/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com