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

给出这个错误

testec99.c:6:17: 错误:标记“(”之前缺少二元运算符 #define tam atoi(getenv("tam")) ^ testec99.c:7:5:注意:在宏“tam”的扩展中 #如果 tam > 0

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

最佳答案

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

所以

#if tam > 0

不评估结果

atoi(getenv("tam"))

但只是进行文本替换。

评估的指令

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

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

getenv() 意味着在运行时进行评估。预处理器实际上不会做你想要在这里实现的事情。

<小时/>

"There's any way to contour this problem?"

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

g++ -Dtam=$tam ...

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

相关文章:

c++ - 添加多个字符串值

不能同时要求两个整数

c - 函数和字符串,检查输入字符串是否匹配

c++ - 具有非类型参数的成员函数的部分特化

c++ - 将字符串从 Fortran 传递到 C++

c++ - strstr() 函数和 "\r\n"

c++ - 使用 MASM 的内联 io 等待

java - 为什么相同的代码在 Java 中的工作方式不同?

c - 如何从 char* 函数返回 char*

c - 将程序计数器 (PC) 修改为已保存的地址