以下代码
#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/