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

另请参阅