【发布时间】:2014-02-14 06:25:50
【问题描述】:
出于某种原因,我需要定义一些嵌套定义。但是预处理器 删除我的宏的一部分。 看下面的代码:
#define SINGLE_ITERATION y+=xext[++xIndex]*H[hCounter--];
#define LOOP_ITERATION SINGLE_ITERATION \
SINGLE_ITERATION SINGLE_ITERATION \
SINGLE_ITERATION SINGLE_ITERATION \
SINGLE_ITERATION SINGLE_ITERATION \
SINGLE_ITERATION
#define DEBUG_CODE #ifdef MEMORIZE \
myOutput[xCounter]=y; \
#endif \
#ifdef STORING \
fprintf(fid,"%f\r\n",y); \
#endif
#define OUT_LOP_ITERATION y=0; \
xIndex=xCounter-HL;\
for(hCounter=HL_MINUS_1;hCounter>0;)
{LOOP_ITERATION} \
SINGLE_ITERATION
但问题在于何时定义了 MEMORIZE 标志。这是编译器创建的预处理器的输出
for( xCounter=XL_MINUS_1;xCounter>=0;xCounter--)
{
y=0;
xIndex=xCounter-HL;
for(hCounter=HL_MINUS_1;hCounter>0;)
{
y+=xext[++xIndex]*H[hCounter--];
y+=xext[++xIndex]*H[hCounter--];
y+=xext[++xIndex]*H[hCounter--];
y+=xext[++xIndex]*H[hCounter--];
y+=xext[++xIndex]*H[hCounter--];
y+=xext[++xIndex]*H[hCounter--];
y+=xext[++xIndex]*H[hCounter--];
y+=xext[++xIndex]*H[hCounter--];
}
y+=xext[++xIndex]*H[hCounter--];
#ifdef
myOutput[xCounter]=y;
#endif
#ifdef STORING
fprintf(fid,"%f\r\n",y);
#endif
}
最后一部分有问题。在:
#ifdef
myOutput[xCounter]=y;
#endif
#ifdef STORING
fprintf(fid,"%f\r\n",y);
#endif
}
必须是
#ifdef MEMORIZE
myOutput[xCounter]=y;
#endif
#ifdef STORING
fprintf(fid,"%f\r\n",y);
#endif
}
并且预处理器省略了MEMORIZE,因为它是当前定义的。
请帮我解决。
【问题讨论】:
-
这组宏会让你的代码在未来很难调试。请考虑在不使用宏的情况下进行重构。
-
你不能把#ifdef 放在这样的#define 中。与stackoverflow.com/a/5586469/2958164 重复
-
预处理器宏嵌套不干净。
-
你不能
#define预处理器指令。但是,如果您这样做,它们将不会在您观察时得到预处理。 -
很抱歉,这个程序需要从头开始重写。查看发布的代码,您似乎不太可能从中挽救任何没有错误的代码。
标签: c++ c visual-c++ c-preprocessor