在阅读onnxruntime源码时,遇到了 #if defined 的写法,平时只用到了#if define(区别在少了d);下面是define与defined的用法与区别:
/* CONDITION1.1 或 CONDITION1.2被定义,则选择执行printf1,否则执行printf2 */
#ifdef CONDITION1.1
printf1("meet with condition 1 !");
#else
#ifdef CONDITION1.2
printf1("meet with condition 1 !");
#else
print2("meet with condition 2 !");
#endif
#endif
上面展示了#ifdef的用法,但是上述写法不简洁,且看起来也怪怪的,那么我们是不是可以作如下改进呢?
/* 本段代码是:错误用法!错误用法!错误用法!重要事情说3遍 */
#ifdef CONDITION1.1 || CONDITION1.2
printf1("meet with condition 1 !");
#else
printf2("meet with condition 2 !");
#endif
上述用法是错误的。因为ifdef和ifndef仅能跟一个宏定义参数,而不能使用表达式。此时可以考虑使用#if defined,用法如下:
/* CONDITION1.1 或 CONDITION1.2被定义,则选择执行printf1,否则执行printf2 */
#if defined CONDITION1.1 || CONDITION1.2
printf1("meet with condition 1 !");
#else
printf2("meet with condition 2 !");
#endif
Now, as you see. 简洁了很多。#if !defined具有类似的用法。