C#define嵌套在#ifdef中[重复]
Posted
技术标签:
【中文标题】C#define嵌套在#ifdef中[重复]【英文标题】:C #define nested in #ifdef [duplicate] 【发布时间】: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 中。与***.com/a/5586469/2958164 重复 预处理器宏嵌套不干净。 你不能#define
预处理器指令。但是,如果您这样做,它们将不会在您观察时得到预处理。
很抱歉,这个程序需要从头开始重写。查看发布的代码,您似乎不太可能从中挽救任何没有错误的代码。
【参考方案1】:
你可能想要:
#ifdef MEMORIZE
#define DEBUG_CODE myOutput[xCounter]=y;
#endif
#ifdef STORING
#define DEBUG_CODE fprintf(fid,"%f\r\n",y);
#endif
【讨论】:
【参考方案2】:你可以试试这个:
#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
【讨论】:
以上是关于C#define嵌套在#ifdef中[重复]的主要内容,如果未能解决你的问题,请参考以下文章
#ifdef 下的 Objective-C 代码在 Swift 中不可见 [重复]
在 Windows 和 Linux 上编译 C++:ifdef 开关 [重复]