#if #elif #define typedef 使用时的注意事项

假设有如下代码需要兼容三个版本

这样无法完成任务的

无论

typedef enum{
	FIRST,
	SECOND,
	THIRD,
};

#define NUM  THIRD

#if (NUM == FIRST)
#define  VAR  1
#elif(NUM == SECOND)
#define  VAR  2
#elif(NUM == THIRD)
#define  VAR  3
#endif

int main(void)
{
#if (NUM == FIRST)
printf("VAL = %d\n",VAR);
#elif(NUM == SECOND)
printf("VAL = %d\n",VAR);
#elif(NUM == THIRD)
printf("VAL = %d\n",VAR);
#endif
}

#define NUM  FIRST还是

#define NUM  SECOND还是

#define NUM  THIRD

运行结果都一样

但是这样就可以完成任务了

#define FIRST    1
#define SECOND   2
#define THIRD    3

#define NUM  THIRD

#if (NUM == FIRST)
#define  VAR  1
#elif(NUM == SECOND)
#define  VAR  2
#elif(NUM == THIRD)
#define  VAR  3
#endif

int main(void)
{
#if (NUM == FIRST)
printf("VAL = %d\n",VAR);
#elif(NUM == SECOND)
printf("VAL = %d\n",VAR);
#elif(NUM == THIRD)
printf("VAL = %d\n",VAR);
#endif
}

#define NUM  FIRST还是

#define NUM  SECOND还是

#define NUM  THIRD

都可以得到想要的结果

为什么呢?????

时间: 2024-08-26 10:55:12

#if #elif #define typedef 使用时的注意事项的相关文章

time.h文件中包含的几个函数使用时须注意事项

time.h头文件中包含以下函数 char* asctime(const struct tm *tm); char* asctime_r(const struct tm *tm,char *buf); char* ctime(const time_t *timep); char* ctime_r(const time_t *timep,char *buf); struct tm *gmtime(const time_t *timep); struct tm *gmtime_r(const tim

CMutex使用时的注意事项,以及CMutex::Unlock何时会返回0

摘要:同一个CMutex对象不允许在两个线程中分别调用Lock和Unlock,否则Unlock会失败并返回0. 一.问题描述 笔者最近在开发过程中遇到了CMutex::Unlock返回0的情况,通过MSDN得知这表示Unlock失败.但MSDN并没有告诉我为什么会失败以及如何处理,查百度谷歌亦无果,于是决定动手探索. 这是MSDN上Unlock对返回值的解释 Return Value Default implementation always returns TRUE. Remarks The

opencv Mat 使用时的注意事项

下面的small tips 是我在做毕设时处理图片遇到的一些问题,先如今都已经找到了解决的方法,适合于opencv的新手看一看. 1. imread() 小陷阱 imread('img.jpg'); 这条语句读进来的是3通道,无论img.jpg是单通道的图像还是3通道的图像,所以输入图像如果是灰度图像,为了不出错,可以使用 imread("img.jpg",-1); 2.normalize() 小陷阱 要注意它的输入矩阵必须是单通道的,具体可见下方红色部分. <span styl

c语言:宏里面参数不加括号容易出错,在使用时尽量加括号及举例

宏里面参数不加括号容易出错,在使用时尽量加括号 程序1: #include<stdio.h> #define SQARE(X) X*X int main() { int  n = 10; int m=SQARE(n); printf("m=%d\n",m); return 0; } 结果: m=100 请按任意键继续. . . 分析:貌似没有出问题,请看下面两个例子 程序2: #include<stdio.h> #define SQARE(X) X*X int 

EntityFrameWork 使用时碰到的小问题

EntityFrameWork 使用时碰到的小问题 1,在使用orm访问数据库的相目里,也要引用EntityFrameWork.dll,否则无法使用orm 否则,编译错误 错误 5 "System.Data.Entity.DbSet`1<DbAccess.Entity.Dept>"不包含"Where"的定义,并且找不到可接受类型为"System.Data.Entity.DbSet`1<DbAccess.Entity.Dept>&qu

Highcharts使用时遇到的问题及解决方案

Highcharts使用时遇到的问题及解决方案 Highcharts图表控件功能强大,对细节处理得很细致,是目前使用最为广泛的图表控件.本文总结了作者在使用Highcharts时遇到的问题及解决方案. 1. 图表颜色设置 图表的边框色,背景色及点.线的颜色都是可以设置的,其中边框色(borderColor).背景色(backgroundColor)在chart中设置: chart: { backgroundColor: 'pink',// 背景色 borderColor: 'red',// 边框

bootstrap使用时 细节心得

最近国庆7天 还原某丽说 APP PC端网页(作业)时  全程使用bootstrap制作 也遇到了以前很少碰到过的问题 bootstrap 本身修改了某些默认样式  即使在 未给标签class命名某个bootstrap模板时  某些标签也被修改过  这样会容易使某些像我一样的新手误以为自己写的代码哪里出了问题  而浪费很多时间去找一个 没有错误的错误  所以在这里给各位同学做个温馨提示 例如 fieldset 中 lengd标签中的文字 应该是水平居中 位于两侧横线中间 并且垂直居中于横线 但在

RHEL6.5上Oracle ACFS与Linux samba一起使用时遇到的bug

RHEL上的Oracle ACFS与linux samba一起使用时遇到的bug 一.环境介绍: cat /etc/issue的结果为: Red Hat Enterprise Linux Server release 6.5 (Santiago) Kernel \r on an \m GI的详细patch信息:仅仅安装了GI的11.2.0.4版本,没有打任何的GI psu,没有打任何的GI patch 二.问题说明: 这是一套rhel6.5的rac,使用的是Oracle GI集群软件,使用了ac

解决导航、Tabbar、tableview配合使用时,tableview错位的问题

导航.Tabbar.tableview配合使用时,tableview会出现错位的情况,特别是除tabbar的第一个选项的tableview, 解决方法非常简单,如下: self.tabBarController = [[UITabBarController alloc] init]; self.tabBarController.edgesForExtendedLayout = UIRectEdgeNone;//防止tableview错位 _tabBarControllerNav = [[UINa