[英]What does #ifndef _Python_CALL mean in a C++ code?
我正在调试包含与 Python 相关的内容的 C++ 代码。 在 function 中:
void normalize(string &text) {
...
#ifdef _Python_CALL
newContentStr = contentStr;
#endif
#ifndef _Python_CALL
...
...
#endif
return 0;
}
我正在使用 GDB 来跟踪代码逻辑,我发现到达该行后:
newContentStr = contentStr;
然后直接跳转到function的最后一行:
return 0;
为什么下面之间的代码被跳过了?
#ifndef _Python_CALL
...
...
#endif
另请注意,第一个是“#ifdef”,第二个是“#ifndef”。 这会跳过吗?
从您显示的代码片段来看, _Python_CALL
是一个宏名称,可能通过#define _Python_CALL
在某处定义(或者可能通过其他方式,例如在编译期间使用 C++ 编译器的命令行参数)。
然后, #ifdef _Python_CALL
行意味着当且仅当宏名称_Python_CALL
被定义( #ifdef
表示“如果定义”)时,在它之后的所有内容直到#endif
行将被编译(并因此在编译的程序中执行)。 由于您声称该行newContentStr = contentStr;
执行后,我们可以假设宏名_Python_CALL
确实是在编译期间定义的。
现在, #ifndef _Python_CALL
行意味着当且仅当宏名称_Python_CALL
未定义时,直到#endif
行之前的所有内容都将被编译(并执行)。 (注意#ifndef
中的n ,它的意思是“如果未定义”)。 但是,正如我们已经知道的(从我们在上一段中得出的结论),情况并非如此,因为确实定义了_Python_CALL
。 因此,该块将不会被编译/执行。
在 Cppreference 上,您可以阅读有关 C++预处理器的更多信息,尤其是有关#define
和#ifdef
/ #ifndef
指令的信息,以获得更深入的了解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.