以下代码

#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:错误:令牌“(”之前缺少二进制运算符
 #定义tam atoi(getenv(“ tam”))
                 ^
testec99.c:7:5:注意:扩展宏“ tam”
 #if tam> 0

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

最佳答案

预处理器在编译时运行(甚至在编译时运行)。

所以

#if tam > 0


不评估的结果

atoi(getenv("tam"))


但只是做文字替换。

评估指令

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


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

getenv()用于在运行时进行评估。预处理器实际上不会执行您似乎想要在此处实现的功能。




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


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

g++ -Dtam=$tam ...

关于c++ - 如何建立这个巨集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31212668/

10-13 09:48