#if预处理程序指令可以嵌套在C ++中吗?


84

我对C ++中的预处理程序指令有疑问:

例如:

#ifndef QUESTION

//some code here

#ifndef QUESTION

//some code here

#endif

#endif

我们可以通过这种方式使用它吗,C ++编译器可以正确匹配ifndefendif吗?


1
您可以嵌套条件,也可以从另一个宏调用一个宏,但是不能直接嵌套宏,例如#define AAA #define XXX-它不能正常工作。
SF。

2
由于一个C问题只是作为该问题的重复而被关闭,因此我将指出C和C ++预处理程序的规则是相同的,至少就此问题而言是相同的。
基思·汤普森

Answers:


112

我们可以。该#endif语句与之前没有对应的#if #ifdef或匹配。#ifndef#endif

例如

#if  ----------|
#if  -----|    |
#endif ---|    |
#endif --------|

我们这里有两个#endif,所以第一个#endif将与第二个#ifndef相匹配?

它与前一个不匹配;那意味着我们不能嵌套它们。
弗雷德·富

49

是的,您可以嵌套#if/#endif块。一些C编码风格会告诉您编写

#ifdef CONDITION1
# ifdef CONDITION2
# endif
#endif

使用空格表示嵌套级别。


5
嵌套位+1,有时会很有帮助。
安德烈·卡隆(

你为什么要插入空格?为什么不只是缩进#ifdef
Jahid

3
我什至不知道#预处理器指令之间允许使用空格。非常感谢您的提示!
AlexR

0

在您的代码中,除非您#undef QUESTION,否则#ifndef QUESTION部分将被丢弃。

祝好运!


抱歉,误读了代码示例!我以为它始于#ifdef问题
bert-jan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.