最近在看代码时发现使用宏控时既有用#ifdef MACRO,也有的用#if defined(MACRO),那么两者之间到底是什么关系呢,是不是一样的?仔细查了一下,发现有相同亦有不同之处:
#ifdef MACRO和#if defined(MACRO)都是预处理运算符
对于判断单个情况下两者是相同的,比如:
#ifdef MACRO== #if defined(MACRO)
#ifndef MACRO== #if !defined(MACRO)
而在需要复杂的编译条件情况下#if defined(MACRO)的优势就很明显了:
情况一:表达式形式
#if defined(MACRO1) && defined(MACRO2) && defined(MACRO3)......
......
#endif
如果你不怕麻烦也可以这样使用
#ifdef MACRO1
#ifdef MACRO2
#ifdef MACRO3
......
#endif
#endif
#endif
而
#if defined(MACRO1) || defined(MACRO2) || defined(MACRO3)......
......
#endif
这种情况就不能用#ifdef代替了
情况二:多条件选择情况下两者的使用方式
前者
#ifdef MACRO1
......
#else
......
#endif
后者
#if defined(MACRO1)
......
#elif defined(MACRO2)
......
#elif defined(MACRO3)
......
#endif
总的来说,#if defined(MACRO)的功能更强大,使用更广泛