我对sprng2.0中的代码感到困惑,它让我在编译后在机器上编译错误。看来我的编译器(gcc 4.7.3)不支持#elif !
,#elif !
是什么意思?或者我可以用#ifndef
替换它吗?我们可以使用“#elif!”在c?
#ifdef SYNC
if(expJ[dE]>sprng(genptr[k]))
#elif !SYNC
if(dE<=0 || expJ[dE]>sprng(genptr[k]))
#endif
的错误消息是error: operator '!' has no right operand
我已经测试过,
#ifdef SYNC
if(expJ[dE]>sprng(genptr[k]))
#elif !(SYNC)
if(dE<=0 || expJ[dE]>sprng(genptr[k]))
#endif
它给我的错误:missing expression between '(' and ')'
就我个人而言,由于这种不一致性,我不会使用'#ifdef',我只是使用'#if defined(...)','#elif defined(...)'等等。更直接的imho,即使它有点冗长。 – Thomas
这不是一个宏,它是一个预处理指令。你需要使用'defined(SYNC)'来检查一个宏是否被...定义好。另外,在第二种情况下,宏将永远不会被定义,所以额外的检查是多余的。 – StoryTeller
'如果X .... elif!X ...'看起来有点冗余冗余。 –