如何构建此宏

How to build this macro

本文关键字:构建 何构建      更新时间:2023-10-16

以下代码

#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"的扩展中#如果tam>0

但如果我删除#if,那么如果"tam"不是数组的维度,它就会正确运行。所以我需要得到一个环境变量的N值。有什么方法可以概括这个问题吗?

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

所以

#if tam > 0

不评估的结果

atoi(getenv("tam"))

但只是做了一个文本替换。

评估指令

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

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

CCD_ 1是指在运行时进行评估。预处理器实际上不会做你在这里想要实现的事情。


"有什么方法可以解决这个问题?">

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

g++ -Dtam=$tam ...