TestForANSIForScope¶
此模块检查 CXX
编译器是否将 for-init-statement 中声明的变量的作用域限制在循环体内。
在 CMake 项目中加载此模块,使用
include(TestForANSIForScope)
在早期 C++(C++98 之前)中,在 for(<init-statement> ...)
中声明的变量在循环体结束后(for() { <body> }
)仍然可以在循环外部访问。
此模块定义了以下缓存变量
CMAKE_NO_ANSI_FOR_SCOPE
一个缓存变量,包含检查结果。如果 for-init-statement 的作用域受限(
C++ 98
及更新版本),则其值为0
;如果不受限(ANSI C++
),则其值为1
。
注意
根据 C++ 98
标准,在 for-init-statement 中声明的变量的作用域被限制在循环体内,这使得该行为已过时。
示例¶
包含此模块将检查 for()
循环作用域行为,并定义 CMAKE_NO_ANSI_FOR_SCOPE
缓存变量
CMakeLists.txt
¶include(TestForANSIForScope)
file(
CONFIGURE
OUTPUT config.h
CONTENT "#cmakedefine CMAKE_NO_ANSI_FOR_SCOPE"
)
之后可以在 C++ 程序中使用
example.cxx
¶#include "config.h"
#ifdef CMAKE_NO_ANSI_FOR_SCOPE
# define for if(false) {} else for
#endif