问题标签 [gcc-extensions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
58 浏览

c++ - 我应该总是在 __builtin_return_address 之后使用 __builtin_extract_return_addr

gcc 文档

可能需要对返回值进行额外的后处理,请参阅__builtin_extract_return_addr

返回地址在内存中的存储表示可能与返回的地址不同__builtin_return_address。例如,在 AArch64 上,存储的地址可能会被返回地址签名破坏,而返回的地址__builtin_return_address则不会。

返回地址的存储表示形式是什么?

__builtin_extract_return_addr

返回的地址__builtin_return_address可能必须通过这个函数来获取实际的编码地址。例如,在 31 位 S/390 平台上,最高位必须被屏蔽,或者在 SPARC 平台上,必须添加偏移量才能执行真正的下一条指令。

如果不需要修复,此函数只需通过 addr。

实际的编码地址是什么?

这是否意味着__builtin_return_address返回地址以某种方式为 CPU 编码?并__builtin_extract_return_addr(__builtin_return_address(0))返回直接(没有任何编码)实际(没有任何班次)返回地址?

如果是这样,为什么有人需要使用__builtin_return_addresswithout __builtin_extract_return_addr


我只想找出哪个函数调用了我的函数。我有使用nm实用程序获得的所有函数的地址。返回的地址nm和返回的地址__builtin_extract_return_addr(__builtin_return_address(0))是否编码相同?

0 投票
2 回答
62 浏览

c - 测试 GNU 扩展

我想制作一个宏来返回复数的实部(适用于 double、float 和 long double 类型)。GNU C 扩展__real__似乎符合要求(尽管不幸的是它不可移植)。我正在尝试以下操作:

然而,扩展似乎__real__没有被定义为一个普通的宏,所以 defined( __real__) 测试失败了,即使它可用。有谁知道如何测试是否存在__real__为此制作适当的宏?

此外,如果有人知道这样做的便携方式,我也会对该解决方案感兴趣。

0 投票
2 回答
68 浏览

c++ - 与 if-else 相比,在 Switch-case 中使用 range 是否会增加编译时间

这是更有效还是:-

这是一个小例子,但如果范围很大并且案例数量也很多,那么 switch case 方法或 if-else 会更好。

0 投票
2 回答
155 浏览

c++ - 为什么在 C++ 中没有定义 n 的 sizeof (array A[n]) 是固定的?

当我试图找到 sizeof(A) 其中 A 是 int 类型且大小为“n”时,n 是一个未定义的 int。我得到一个 496 的输出,当我给 n 一个值然后检查它时,sizeof(A) 给了我相同的 496 值。我知道 Array 是一种静态数据类型,所以无论'n'如何,它都会有内存但是谁能解释一下 496 的值是从哪里来的?

0 投票
4 回答
284 浏览

c - 如何在 C 中实现 Go 的 defer() 以便允许声明变量?