TestForANSIForScope¶
此模块用于检查 CXX 编译器是否将变量的作用域限制在 for 初始化语句的循环体内。
在 CMake 项目中加载此模块,使用
include(TestForANSIForScope)
在早期 C++ (C++98 之前) 中,在 for(<init-statement> ...) 中声明的变量可以在循环体之后(for() { <body> })继续访问。
此模块定义了以下缓存变量
CMAKE_NO_ANSI_FOR_SCOPE一个缓存变量,包含检查结果。如果 for 初始化语句的作用域受限(
C++ 98及更新版本),则设置为值0,如果不受限(ANSI C++),则设置为值1。
注意
根据 C++ 98 标准,在 for 初始化语句中声明的变量的作用域被限制在循环体内,因此这种行为已过时。
示例¶
包含此模块将检查 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