Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用带有枚举常量的`#ifndef`中的`#define`时出现问题_C_If Statement_Enums_C Preprocessor - Fatal编程技术网

C 使用带有枚举常量的`#ifndef`中的`#define`时出现问题

C 使用带有枚举常量的`#ifndef`中的`#define`时出现问题,c,if-statement,enums,c-preprocessor,C,If Statement,Enums,C Preprocessor,我有一个问题,移动到不同版本的API库已经重命名了其中一个常量。特别是,5.04版使用了梯度下降学习,6.07版使用了梯度上升学习 没问题,我想。我将使用#define将旧常量设置为新常量值,然后根据它进行编译。 因此,我将其放在相关C文件的顶部: #include Netica.h #if defined(GRADIENT_DESCENT_LEARNING) /* Version 5.04 uses descent*/ #else /* Fix for label changes from

我有一个问题,移动到不同版本的API库已经重命名了其中一个常量。特别是,5.04版使用了
梯度下降学习
,6.07版使用了
梯度上升学习

没问题,我想。我将使用
#define
将旧常量设置为新常量值,然后根据它进行编译。 因此,我将其放在相关C文件的顶部:

#include Netica.h
#if defined(GRADIENT_DESCENT_LEARNING)
/* Version 5.04 uses descent*/
#else 
/* Fix for label changes from version 5.04 to 6.07 */  
#define GRADIENT_DESCENT_LEARNING  GRADIENT_ASCENT_LEARNING
#endif
当我针对6.07代码进行编译时(使用
GRADIENT\u ascend\u LEARNING
),这工作正常,但当我尝试针对早期定义的4.05库进行编译时(使用
GRADIENT\u ascend\u LEARNING
),我会收到以下一系列错误消息:

Experience.c:98:19: error: use of undeclared identifier
      'GRADIENT_ASCENT_LEARNING'; did you mean 'GRADIENT_DESCENT_LEARNING'?
      algorithm = GRADIENT_DESCENT_LEARNING;
                  ^~~~~~~~~~~~~~~~~~~~~~~~~
                  GRADIENT_DESCENT_LEARNING
Experience.c:14:36: note: expanded from macro 'GRADIENT_DESCENT_LEARNING'
#define GRADIENT_DESCENT_LEARNING  GRADIENT_ASCENT_LEARNING
                                   ^
/Users/ralmond/software/Netica_API_504/src/Netica.h:149:51: note: 
      'GRADIENT_DESCENT_LEARNING' declared here
typedef enum {COUNTING_LEARNING=1, EM_LEARNING=3, GRADIENT_DESCENT_LEARNI...
                                                  ^
中间那一行使我困惑。听起来,即使通过
Netica.h
中的enum定义的
梯度下降学习
,也会发生重新定义。(6.07版本使用了
梯度上升学习
代替
梯度下降学习

如何测试枚举常量是否已定义

我在MacOS下使用clang 11.0.0版(Xcode 4.2.1)时遇到了这个问题,在Windows(MinGW-w64)下使用GCC 4.9.3时出现了一个非常类似的问题(错误消息的措辞略有变化)。

答案是:

枚举常量是在编译时定义的,而不是在预处理器时定义的,因此该常量始终未定义


我需要一个更好的(可能是破解第三方库中的头文件)。

这是一个关闭问题并删除它的原因,而不是发布一个重复相同内容的答案。