C++ 如何构建这个宏
下面的代码C++ 如何构建这个宏,c++,c,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 #包括 #包括 #包括 #包括 #定义N 100 #定义tam原子(getenv(“tam”)) #如果tam>0 #恩迪夫 给出这个错误 testec
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <time.h>
#define N 100
#define tam atoi(getenv("tam"))
#if tam > 0
#endif
#包括
#包括
#包括
#包括
#定义N 100
#定义tam原子(getenv(“tam”))
#如果tam>0
#恩迪夫
给出这个错误
testec99.c:6:17:错误:在标记“(”之前缺少二进制运算符
#定义tam原子(getenv(“tam”))
^
testec99.c:7:5:注意:在宏“tam”的展开中
#如果tam>0
但是如果我删除了#if,那么如果“tam”不是数组的维数,它就会正确运行。因此我需要获取环境变量的N值。有没有办法解决这个问题?预处理器在编译时运行(甚至在它之前) 所以 不评估的结果
atoi(getenv("tam"))
但只是做一个文本替换
求值指令
#if atoi(getenv("tam"))> 0
对于预处理器来说没有意义,因此会出现错误消息
getenv()
将在运行时进行计算。预处理器实际上不会执行您在此处似乎想要实现的操作
“有没有办法解决这个问题?” 是的,您可以使用编译器的
-D
选项来解析$tam
环境值(例如,对于GCC工具链):
但奇怪的是,如果我不尝试创建一个大小为tam的数组,只打印tam的值,它就工作了。我遗漏了什么吗?@Joãopaulandrade“我遗漏了什么吗?”是的,说真的,
#如果tam>0
是在编译时执行的,而像这样的东西则无法执行
#if atoi(getenv("tam"))> 0
g++ -Dtam=$tam ...