#include <iostream>
using namespace std;
#ifndef R
#define N1 10
#ifndef R
#define N2 11
#endif
#endif
int main(){
cout << N2 << endl;
}
根据我的理解,如果R
未定义,则N1
将为10。
再次定义R
的第二种情况,它不应该将N2
定义为11,因为R
已经定义。我只是对此感到困惑,我可以帮助理解我错过的观点。
答案 0 :(得分:0)
第二个#ifndef
是您目前组织的方式的冗余。我会用更清晰的伪代码写出来
IF R IS NOT DEFINED
SET N1 = 10
IF R IS NOT DEFINED
SET N2 = 11
END IF
END IF
这可以更简单
IF R IS NOT DEFINED
SET N1 = 10
SET N2 = 11
END IF
或在C / C ++预处理程序表示法中
#ifndef R
#define N1 10
#define N2 11
#endif
答案 1 :(得分:0)
让我们来看看代码:
#ifndef R
R
尚未定义,因此请进入分支:
#define N1 10
N1
变为10
#ifndef R
R
尚未定义,因此请进入嵌套分支
#define N2 11
N2
被分配到11
#endif
结束嵌套分支
#endif
结束主要分支
所以最后R
从未定义,所以我们成功分配了N2
。
您需要在编译器行中显式#define R
或使用-DR
来定义R
,它不会在ifndef R
分支中为您定义。