如何构建这个宏

时间:2015-07-03 18:44:48

标签: c++ c

以下代码

#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <time.h>
#define N 100
#define tam atoi(getenv("tam"))
#if tam > 0
#endif

发出此错误

testec99.c:6:17:错误:在令牌之前缺少二元运算符“(”  #define tam atoi(getenv(“tam”))                  ^ testec99.c:7:5:注意:扩展宏'tam'  #if tam&gt; 0

但如果我删除#if,如果“tam”不是数组的维度,它会正确运行。所以我需要获取环境变量的N值。有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

预处理器在编译时运行(不知何故甚至在它之前)。

所以

#if tam > 0

不评估

的结果
atoi(getenv("tam"))

但只是进行了文字替换。

评估指令

 #if atoi(getenv("tam"))> 0

对预处理器没有意义,因此错误消息。

getenv()旨在在运行时进行评估。预处理器实际上并不会执行您在此处想要实现的目标。

  

“有什么方法可以解决这个问题吗?”

是的,您可以使用编译器的-D选项来解析$tam环境值(例如,对于GCC工具链):

g++ -Dtam=$tam ...