#ifdef和#if的差别

6 篇文章 2 订阅

最近项目要从windows平台移植到linux平台,所以做了很多兼容性相关的工作。遇到一个小问题,我想通过WIN32宏来区分两个平台,之前以外WIN32变量是自己定义到,所以我做了如下声明:

#define WIN32 1 //1:windows, 0:linux

程序中这样使用:

#if WIN32 1

     //do something in windows

#else

    //do something in linux

#endif

于是,把整个工程在linux平台下编译一遍,出现了很多编译错误,均来自于opencv到库文件,这是不能容忍的,为这个问题困扰了一天!

最终找到了答案,那是因为opencv在做兼容性时,windows用的就是WIN32这个宏,而且都是这样使用的:

#ifdef WIN32  

      //do something in windows

当程序中define了WIN32之后,就认为在linux下定义了WIN32,所以又去编译windows相关的东西,显然这是错误的。

所以,得出了结论:

1) WIN32宏是windows系统自带定义的宏,可直接使用,不用再去define

2) #ifdef的意思表示只要定义了就为真,所以使用时直接#ifdef WIN32,并且如果#define VAR 1,那么VAR就被定义,就可直接使用#ifdef VAR,而不管VAR是多少

3) #if的意思表示如果定义到宏是否为0,这时就要看宏到定义了,具体用时就是#if VAR 1.


一个小的知识点,就可以困扰你一天,终于明白编程规范是多么重要,谨记!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值