- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在修改 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
最佳答案
显然标识符已被标记为有毒
#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/
苏, 我正在尝试对一些嵌套的 Ecto 模型进行编码,但遇到了问题。我意识到我无法对未加载的模型进行编码,并且我希望有可能只选择一个结构而不加载其余部分,同时有可能选择整棵树。 我使用了 defimp
我在几篇论文中发现了“BGP 中毒”和“中毒 AS”的说法,有时它似乎指的是完成某件事以达到某种目的,有时它被认为是坏事,但从未解释过“BGP 中毒”到底是什么” 其实是。 由于我自己无法找到这个问题
我有下面的 Ecto 模型。当我尝试渲染时出现错误。如何修改 @derive 以使其预加载?还是我必须写出实现?处理这个问题的推荐方法是什么? ** (RuntimeError) cannot enc
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我面临着一个小难题。 我需要在一个类型的许多实例上重复调用给定的方法,这些实例可能存在也可能不存在。因为对于任何给定实例,该方法的结果永远不会改变,所以我缓存它的返回值以供将来使用,以减少开销并在后续
我在 Phoenix 中使用默认的 json 工具,但由于某种原因,我无法返回任何日期(字段类型:日期)。我得到这样的东西: unable to encode value: {2015, 3, 24}
我已创建 Azure 服务总线,并且正在使用 Azure Function 监听消息。 如果我在处理消息期间在 Function 中抛出异常。然后整个过程将重复 10 次,然后消息将被移动到死信队列。
IO.puts(inspect(contacts)) 给出: [%HelloTable.Contact{__meta__: #Ecto.Schema.Metadata, id: 37, in
我使用 crash用于测试 Crashlytics 集成的功能,但我显然不想在应用程序中发布该代码。 标识符中毒是可能的,因此当前或将来的任何使用都会导致错误: #pragma GCC poison
ab = %{a: 1} ac = %{"a" => 1} 具体有什么区别?为什么Poison.decode!返回格式#2(我需要#1 与 Ecto.Changeset.change 一起使用)。 J
我正在开发一个 elixir API,我正在使用 JaSerializer,但在我调用 post API 时它给了我一个类似这样的错误。 function Poison.encode_to_iodat
我正在测试我正在构建的 Webjob 的 Poison 消息处理。 一切似乎都按预期进行,除了一件奇怪的事情: 当一条消息被移动到“-poison”队列时,它的幽灵似乎仍然隐藏在主作业队列中(不可见)
出于阅读目的,我希望在 json 文件中添加特定的按键顺序。 我知道 map 的键没有任何顺序,所以我们不应该依赖它,但由于 Poison 无法对 Prop 列表进行编码,我不知道如何做到这一点。 i
我正在开发一个 elixir API,我正在使用 JaSerializer,但在我调用 post API 时它给了我一个类似这样的错误。 function Poison.encode_to_iodat
我有非常简单的代码,它使用“Poison Pill”模拟生产者/消费者停止技术。 我有生产者类: public class Producer extends Thread { private
我正在为 atmega168a 编写 C 代码。当我编译下面的代码时,出现了 attempt to use poisoned "SIG_OUTPUT_COMPARE0A 和 attempt to us
在 Scott Schurr 演讲的最后 "Introducing constexpr" at CppCon ,他问“有没有办法毒化一个功能”?然后他解释说,这可以通过以下方式完成(尽管以非标准方式)
我是 elixir 的新手,想测试 iex 的 Poison 函数 https://hexdocs.pm/poison/1.3.1/#functions_details iex> Poison.dec
根据 azure 文档,可以通过从 azure-webjobs-hosts 中删除 blob 来重新触发它们。 [...Blob 收据存储在函数应用的 Azure 存储帐户中名为 azure-webj
根据 azure 文档,可以通过从 azure-webjobs-hosts 中删除 blob 来重新触发它们。 [...Blob 收据存储在函数应用的 Azure 存储帐户中名为 azure-webj
我是一名优秀的程序员,十分优秀!