gpt4 book ai didi

c - GCC 错误消息 : attempt to use poisoned "TARGET_I386"

转载 作者:太空狗 更新时间:2023-10-29 17:15:56 24 4
gpt4 key购买 nike

我正在修改 Qemu 的源代码,创建了一个这样的文件

#if defined(TARGET_I386)
/* some defines */
#elif defined(TARGET_ARM)
/* some other defines */
#endif

此文件随后包含在 vl.c 中,gcc 报告以下错误消息:

error: attempt to use poisoned "TARGET_I386"
error: attempt to use poisoned "TARGET_ARM"

TARGET_I386在另一个头文件中定义,并在其他qemu的源文件中使用。

此错误消息的含义是什么?

更新:

正如 Matthias Werner 所提到的,这些定义不应该用于目标独立代码。这些毒药标识在 poison.h

中定义

最佳答案

显然标识符已被标记为有毒

来自 GCC Documentation

#pragma GCC 毒药

有时,您希望从您的程序中完全删除一个标识符,并确保它永远不会重新出现。为了强制执行此操作,您可以使用此 pragma 毒化标识符。 #pragma GCC poison 后跟要毒化的标识符列表。如果这些标识符中的任何一个出现在指令之后的源代码中的任何位置,则这是一个硬错误。

例如,

#pragma GCC poison printf sprintf fprintf
sprintf(some_string, "hello");

会产生错误。

如果中毒标识符作为标识符中毒之前定义的宏扩展的一部分出现,则不会导致错误。这使您可以毒化标识符,而不必担心定义使用它的宏的系统 header 。

例如,

#define strrchr rindex
#pragma GCC poison rindex
strrchr(some_string, 'h');

不会产生错误。

关于c - GCC 错误消息 : attempt to use poisoned "TARGET_I386",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9461625/

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