C #define嵌套在#ifdef中

时间:2014-02-14 06:25:51

标签: c++ c visual-c++ c-preprocessor

出于某种原因,我需要定义一些嵌套定义。但预处理器 删除我的宏的一部分。 请看下面的代码:

#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,因为它是当前定义的。

请帮我解决。

2 个答案:

答案 0 :(得分:0)

你可能想要:

#ifdef MEMORIZE 
#define DEBUG_CODE myOutput[xCounter]=y;
#endif

#ifdef STORING
#define DEBUG_CODE fprintf(fid,"%f\r\n",y);
#endif

答案 1 :(得分:-1)

你可以试试这个:

#if defined(MEMORIZE) && defined(STORING)
#define DEBUG_CODE myOutput[xCounter]=y;\
                                        fprintf(fid,"%f\r\n",y);
#elif defined(MEMORIZE)
#define DEBUG_CODE myOutput[xCounter]=y;
#elif defined(STORING)
#define DEBUG_CODE fprintf(fid,"%f\r\n",y);
#else
#define DEBUG_CODE
#endif