【问题标题】:#ifdef is causing a conflict, even though i used #endif#ifdef 导致冲突,即使我使用了#endif
【发布时间】:2020-04-06 04:16:26
【问题描述】:

这就是我正在做的,但它给了我: “ 错误:value_t 的类型冲突”

我不知道为什么它不起作用,有人可以帮忙吗?

这是在我用于两个程序的头文件中,其中一个正在使用 -DFRACT 运行。

而另一个使用 -DINT,而我没有同时运行 -DINT 和 -DFRACT,那么为什么会导致冲突?

gcc -DFRACT -o program1 program1.c

这就是我运行 program1 的方式 ..

对于程序 2: gcc -DINT -o program2 program2.c

我还检查了所有其他头文件的重复项,但没有发现 谢谢你!

#ifdef INT   
typedef int value_t;   
typedef double Key_t;
#endif


#ifdef FRACT     
typedef  Fraction value_t;  
typedef double Key_t;
#endif

【问题讨论】:

  • 旁白:typedef double Key_t; 对两者都是通用的,因此请考虑不要复制代码
  • 无法从您的代码中重现错误。您必须以某种方式将#define INT 和#define FRACT 放在一起。您应该检查所有头文件,而不仅仅是这个。该文件还包括哪些其他头文件?他们是否以任何方式一起定义了这些宏?或者,你忘记#undef 什么了吗?
  • “我没有同时运行 -DINT 和 -DFRACT”。你只是这么认为还是你已经证明了这一点?通过直接查看实际的预处理输出进行验证。如果使用gcc,则选项为-E。事实上,我们无法真正提供帮助,因为您的问题中没有足够的信息让我们看到问题。
  • 我检查了所有这些,没有其他定义 INT 和 FRACT
  • 尝试将其添加到您的代码中(3 个单独的行):#if defined(INT) && defined(FRACT)#error "both INT and FRACT defined"#endif

标签: c ifdefine


【解决方案1】:

你可能打算这样做:

#if defined (INT) && defined (FRACT)
  #error both defined
#elif defined (INT)
  typedef int value_t;   
#elif defined (FRACT)
  typedef Fraction value_t;  
#else
  #error neither defined
#endif

【讨论】:

    猜你喜欢
    • 2010-12-20
    • 2014-10-16
    • 2010-10-29
    • 2023-04-05
    • 2010-11-12
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    相关资源
    最近更新 更多