如何识别在C中重新定义宏?

我有两个大的框架库,其头文件都包含在我的项目。 任一个完美的作品,但包括导致不正确的行为(但涉及到宏观任何错误消息)。

我认为他们都#定义的同名宏。 什么是最有效的方式,以确定有问题的宏?

--------------解决方案-------------

如果头文件写的不好和#undef SYMBOL ... #define SYMBOL something-else你就不能跟踪此。 简单地#defining宏两次至少应该发出警告。 你不得不更密切地关注了“异常行为”。

我认为他们都#定义的同名宏。

应产生至少一个警告由编译器(如果它们在相同的翻译单元)。

如何识别在C / C ++重新定义宏?

据我所知,没有直接的方式。

任一个完美的作品,但包括导致不正确的行为

能否请您给我们的eratic行为的一些细节? 居然会发生什么? 是什么让你觉得这是宏定义?

尝试寻找在预处理输出,以确定何时你什么是它的不同#include头文件,当你不知道。 与海湾合作委员会和MSVC,你会进行编译-E给预处理输出打印到标准输出。 (这可能将是数千行的,所以你会希望它管到一个文件。)

您应该能够运行ctags在你的源代码ctags可以生成一个标记文件,除其他事项外,包含在你的C文件的名称和宏的位置。

您可以控制的ctags在标签文件将存储通过使用符号的类型--c-kinds选项。 例如ctags --c-kinds=+d -f tags --recurse ./your_source_directory/

然后,您可以搜索生成的标签文件副本。

grep命令的#define?

你确定这个问题是不是比宏别的东西(例如编译指示structur包装,全球内存分配,类名全局命名空间,与区域设置搞乱...)

  1. 编译上的所有警告 - 他们应该告诉你,当宏“已定义”(也许你可以修改代码,以解决这个问题)
  2. 如果(1)没有帮助,那么你应该尝试创建函数封装为每个库。 这样就避免了包括冲突的头通过包括裹头,使用包裹功能。 这是艰苦的,但它有时使两个库共存于一个应用程序的唯一途径。

基本上溶液(2)将使得库之间的分离。 这种冲突的一个例子是与ACE时使用了与不同的选择(一个库的Unicode的其他ASCII)编译预编译库被迫wxWidgets的(2.8版)。

分类:C# 时间:2015-03-15 人气:0
本文关键词: C#中,宏定义
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.800 (s). 10 q(s)