gpt4 book ai didi

c - GCC "artificial"函数属性的用例

转载 作者:太空狗 更新时间:2023-10-29 16:59:41 26 4
gpt4 key购买 nike

我刚刚阅读了有关 GCC 函数属性 artificial 的内容,但并没有完全理解其描述。你能给我一些它有用的例子吗?

最佳答案

另一个答案没有错,但也许我可以解释得更好一些。

想象一下 foo.c 中的这个函数,带有行号:

10: static inline int foo(struct q *x)
11: {
12: return bar(x + 1);
13: }

这被另一个函数调用了两次:

20: void baz(void)
21: {
22: x = foo(qa);
23: x = foo(qb);
24: }

不幸的是,bar()崩溃。这是回溯:
#0 0x00000000004b1a2a in bar (x=0x8) at foo.c:5
#1 0x0000000000416ee0 in baz () at <b>foo.c:12</b>
#2 0x0000000000413fab in main () at foo.c:30

foo是内联的,它不是回溯的一部分,但是等等,foo.c:12foo ,下面就是 main 中的行.没有什么可以告诉我们 baz 中的哪一行导致坠机。

如果我们将 foo 标记为人工的,我们将改为获取此回溯:
#0 0x00000000004b1a2a in bar (x=0x8) at foo.c:5
#1 0x0000000000416ee0 in baz () at <b>foo.c:22</b>
#2 0x0000000000413fab in main () at foo.c:30

它不再指向foo .相反,它向我们展示了 foo 在哪里被调用自 foo.c:22 .突然之间很容易说出 qa是有问题的变量。

关于c - GCC "artificial"函数属性的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20110291/

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