gpt4 book ai didi

c - 如何忽略定义指令?

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:25 25 4
gpt4 key购买 nike

我有以下问题。我正在编写依赖于其他人代码的 C 代码,我无法对其进行更改。在该代码中(不允许我更改)是一个define 预处理器指令。我的代码是在另一段代码之前编译的。我需要一种方法来避免这种情况,以便我的代码不受此 define 指令的影响。

有没有办法告诉预处理器从现在开始忽略所有指令?

几乎对我有用的是以下 pragma poison 指令,但不幸的是,这会引发错误。有没有办法抑制这个错误?

#pragma GCC poison define

我知道这不是一个容易回答的问题,但我非常感谢您的帮助。

最佳答案

我认为您可以这样做:假设问题是其他代码将 string 定义为 char * 并且在您需要包含的 header 中的某处.您可以在包含其他代码后的 c 文件中定义:

#ifdef string
#undef string
#endif

如果您的代码每次都包含相同的 header ,您可以将所有包含在一个 header 中并在最后对其进行清理:一个示例可以是 other_include.h:

#ifndef _OTHER_INCLUDE_H
#include <otherheader_a.h>
#include <otherheader_b.h>
#include <otherheader_c.h>

/*Sanitize string definition */

#ifdef string
#undef string
#endif
#endif /* _OTHER_INCLUDE_H */

如果您不那么幸运,您必须创建一个sanitize.h header 并将其包含在您的c 文件中的所有其他包含之后。

此外,如果您需要禁用宏并在之后恢复它的某些代码部分:

#ifdef string
#define _temp_string string
#undef string
#endif

当你想恢复它的时候

#ifdef _temp_string
#define string _temp_string
#undef _temp_string
#endif

这不是很优雅,但您可以将其用作细粒度以确保您的子例程安全。

关于c - 如何忽略定义指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27126890/

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