如何在包含之后删除声明

莫里亚德

我正在将项目迁移到新的工具链,并且函数名称冲突,这是源于代码中的函数以及新工具链中包含的函数。现在,我的代码必须在旧的和新的工具链中编译,因此我不能只是破解。

例如在相同的include中,新的工具链具有已经实现的qsort函数(以及部分标准库...因此我不能只是忽略它),但是我有我自己的并希望保留我拥有的控件超过。

有没有一种方法可以删除声明(取消声明?)符号,以便改用我的项目本地的符号?

我搜索了一段时间,但没有找到解决此问题的任何策略。

埃里克·波斯特皮希尔(Eric Postpischil)

C标准没有提供删除声明的任何方法,而且我还没有听说过任何扩展名。您的选择包括:

  • 重命名源代码中与标准库标识符冲突的标识符。这是您应该做的。
  • 在包含任何标准头文件之前和之后使用#define#undef可以将冲突的名称更改为其他名称。下面是一个示例。这违反了有关保留标识符的标准C规则,并且可能会导致问题,具体取决于您使用的C实现。
  • 使用#define更改标识符名称。从技术上讲,这也违反了标准C规则,但不太可能导致C实现的问题。这将需要在使用标识符的每个源文件中完成。示例如下。这里的想法是,导致在您使用自己的qsort标识符(或其他发生冲突的标识符)的情况下,在预处理器中被替换为另一个不冲突的标识符的情况。
  • 您可以在C实现中修改头文件。这几乎总是一个坏主意。我提到它只是为了包括所有可能性。(由于这是更糟糕的主意,因此我不包括的另一种可能性是,您可以修改C实现的源代码以提供删除声明的新扩展。)

这是第二项的示例:

#define qsort StandardLibraryQsortRenamedDueToConflict
#include <stdlib.h>
#undef qsort

这是第三项的示例:

#include <stdlib.h>
#define qsort MyQsort
#include "MyHeader.h"

如果您在自己的头文件之一之后包含标准头文件,并且无法重新排序它们,则必须使用#undef以避免干扰标准头文件:

#define qsort MyQsort
#include "MyHeader0.h"
#undef qsort
#include <stdlib.h>
#define qsort MyQsort
#include "MyHeader1.h"

如果在任何源文件中的任何麻烦的头文件之后没有任何标准头文件,则可以将每个#define文件放置在其相应的头文件中,而不是在每个源文件中插入上述文件。因此MyHeader.h可能看起来像:

… // Various code.
#define qsort MyQsort
void qsort(parameter…)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在mkfs之后删除分区

来自分类Dev

如何在 fprintf C 之后删除空格

来自分类Dev

我如何在ada中声明非包含浮点范围?

来自分类Dev

如何在包含的页面中使用声明的变量?

来自分类Dev

如何在调用JMenu.addSeparator()之后将其删除

来自分类Dev

如何在Perl中的ls之后删除换行符?

来自分类Dev

如何在Processing中的draw()之后删除先前的形状

来自分类Dev

如何在角度的哈希(#)之后删除立即斜杠(/)

来自分类Dev

熊猫:如何在groupby和unstack之后删除索引列?

来自分类Dev

如何在调用JMenu.addSeparator()之后将其删除

来自分类Dev

如何在条件之后删除数组中的每个元素?

来自分类Dev

如何在 STRING_AGG 之后删除重复项?

来自分类Dev

如何删除'-'之后的文字?

来自分类Dev

如何在C ++中动态声明和删除数组

来自分类Dev

在maven或其他地方使用JAXB之后如何在XML中声明属性的顺序

来自分类Dev

如何删除仅在包含某些字符串的行之后加倍的行-Linux / bash

来自分类Dev

如何在python中删除包含非ascii值的行

来自分类Dev

如何在RegEx中删除包含特定字符的单词?

来自分类Dev

如何在Linux中删除包含NA的列

来自分类Dev

如何声明放置在main之后的类模板?

来自分类Dev

如何在包含JSoup属性的特定值的div之后添加<br>

来自分类Dev

如何在包含少量单词的子字符串之后插入字符串

来自分类Dev

如何在包含特定字符串的最后一列之后添加一列?

来自分类Dev

如何在mongodb中的过滤器之后输出/映射仅包含必需字段的数组?

来自分类Dev

如何在Rails的应用程序样式表之后包含视图样式表?

来自分类Dev

PHP-如何在包含header.php之后更改页面的元内容?

来自分类Dev

如何在包含多个画布的部分之后添加一个部分?

来自分类Dev

如何删除包含“ +”的行?

来自分类Dev

如何删除包含文件?

Related 相关文章

  1. 1

    如何在mkfs之后删除分区

  2. 2

    如何在 fprintf C 之后删除空格

  3. 3

    我如何在ada中声明非包含浮点范围?

  4. 4

    如何在包含的页面中使用声明的变量?

  5. 5

    如何在调用JMenu.addSeparator()之后将其删除

  6. 6

    如何在Perl中的ls之后删除换行符?

  7. 7

    如何在Processing中的draw()之后删除先前的形状

  8. 8

    如何在角度的哈希(#)之后删除立即斜杠(/)

  9. 9

    熊猫:如何在groupby和unstack之后删除索引列?

  10. 10

    如何在调用JMenu.addSeparator()之后将其删除

  11. 11

    如何在条件之后删除数组中的每个元素?

  12. 12

    如何在 STRING_AGG 之后删除重复项?

  13. 13

    如何删除'-'之后的文字?

  14. 14

    如何在C ++中动态声明和删除数组

  15. 15

    在maven或其他地方使用JAXB之后如何在XML中声明属性的顺序

  16. 16

    如何删除仅在包含某些字符串的行之后加倍的行-Linux / bash

  17. 17

    如何在python中删除包含非ascii值的行

  18. 18

    如何在RegEx中删除包含特定字符的单词?

  19. 19

    如何在Linux中删除包含NA的列

  20. 20

    如何声明放置在main之后的类模板?

  21. 21

    如何在包含JSoup属性的特定值的div之后添加<br>

  22. 22

    如何在包含少量单词的子字符串之后插入字符串

  23. 23

    如何在包含特定字符串的最后一列之后添加一列?

  24. 24

    如何在mongodb中的过滤器之后输出/映射仅包含必需字段的数组?

  25. 25

    如何在Rails的应用程序样式表之后包含视图样式表?

  26. 26

    PHP-如何在包含header.php之后更改页面的元内容?

  27. 27

    如何在包含多个画布的部分之后添加一个部分?

  28. 28

    如何删除包含“ +”的行?

  29. 29

    如何删除包含文件?

热门标签

归档