c语言,stm32,嵌入式,arm 中keil出现下面的错误,不知什么原因,#ifdef编译没有问题啊。跪求 一定采纳

..\..\uIP_enc28j60\udp_demo.c(9): warning: #47-D: incompatible redefinition of macro "LED1_ON" (declared at line 10 of "..\..\uIP_enc28j60\demo.h")

我看了一下c文件和该C文件包含的同一个文件对一个宏有重复相同的定义,我的另一个这样的工程里没有这个警告,但是这一个工程却有,不知为什么

这个警告是正常的。
看看你的另一个工程,是不是把警告全部都关闭了。在Options for Target >> C/C++选项卡下,看看Warning设置的是什么。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-28
用#if 0先屏蔽重复定义,然后再编译试试

C语言当中的#ifdef DEBUG, #define ,#else,#endif等的意义
ifdef 标识符 程序段1 else 程序段2 endif 它的功能是,如果标识符已被#define 命令定义过则对程序段1 进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else 可以没有,即可以写为:ifdef 标识符 程序段 endif 第二种形式:ifndef 标识符 程序段1 else 程序段2 endif ...

是否能在keil中混合编译c和c++程序
1、C文件扩展名必须为.C, C++文件扩展名必须为.CPP, 头文件扩展名必须为.CPP。 如果源文件的扩展名使用错误,会导致编译出错。2、C语言的头文件,需要加上如下条件编译及限制代码:ifdef __cplusplus extern "C" {#endif\/\/原本的头文件内容。 #ifdef __cplusplus} #endif其功能为,当使...

在keil c stdint.h头文件中有#ifdef __C51__,想请问C51是keil 默认定义...
比如keil C51会定义_C51_,keil MDK会定义__ARMCC_VERSION,IAR编译器会定义__IAR_SYSTEMS_ICC等 上面列出的这些宏一般用来识别是哪家的编译器,这样代码可以根据这个编译器特性做相应设置或优化.编译器一般会预先定义许多宏, 可以参考编译器的用户手册....

相似回答