C++所有的预未定义标识符gets

【图文】C++第2章_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
大小:331.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢2010年4月 Delphi大版内专家分月排行榜第二2010年3月 C++ Builder大版内专家分月排行榜第二2009年9月 C++ Builder大版内专家分月排行榜第二2005年10月 Java大版内专家分月排行榜第二2006年11月 C++ Builder大版内专家分月排行榜第二2006年10月 C++ Builder大版内专家分月排行榜第二2006年9月 C++ Builder大版内专家分月排行榜第二2006年7月 C++ Builder大版内专家分月排行榜第二2004年1月 C++ Builder大版内专家分月排行榜第二2006年1月 Delphi大版内专家分月排行榜第二
2010年5月 C++ Builder大版内专家分月排行榜第三2006年8月 C++ Builder大版内专家分月排行榜第三2004年2月 C++ Builder大版内专家分月排行榜第三2003年8月 C++ Builder大版内专家分月排行榜第三2006年4月 Delphi大版内专家分月排行榜第三2005年12月 Delphi大版内专家分月排行榜第三
2010年4月 Delphi大版内专家分月排行榜第二2010年3月 C++ Builder大版内专家分月排行榜第二2009年9月 C++ Builder大版内专家分月排行榜第二2005年10月 Java大版内专家分月排行榜第二2006年11月 C++ Builder大版内专家分月排行榜第二2006年10月 C++ Builder大版内专家分月排行榜第二2006年9月 C++ Builder大版内专家分月排行榜第二2006年7月 C++ Builder大版内专家分月排行榜第二2004年1月 C++ Builder大版内专家分月排行榜第二2006年1月 Delphi大版内专家分月排行榜第二
2010年5月 C++ Builder大版内专家分月排行榜第三2006年8月 C++ Builder大版内专家分月排行榜第三2004年2月 C++ Builder大版内专家分月排行榜第三2003年8月 C++ Builder大版内专家分月排行榜第三2006年4月 Delphi大版内专家分月排行榜第三2005年12月 Delphi大版内专家分月排行榜第三
2010年4月 Delphi大版内专家分月排行榜第二2010年3月 C++ Builder大版内专家分月排行榜第二2009年9月 C++ Builder大版内专家分月排行榜第二2005年10月 Java大版内专家分月排行榜第二2006年11月 C++ Builder大版内专家分月排行榜第二2006年10月 C++ Builder大版内专家分月排行榜第二2006年9月 C++ Builder大版内专家分月排行榜第二2006年7月 C++ Builder大版内专家分月排行榜第二2004年1月 C++ Builder大版内专家分月排行榜第二2006年1月 Delphi大版内专家分月排行榜第二
2010年5月 C++ Builder大版内专家分月排行榜第三2006年8月 C++ Builder大版内专家分月排行榜第三2004年2月 C++ Builder大版内专家分月排行榜第三2003年8月 C++ Builder大版内专家分月排行榜第三2006年4月 Delphi大版内专家分月排行榜第三2005年12月 Delphi大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。预定义的宏
预定义的宏
预定义的宏
Visual Studio 2015
若要了解有关 Visual Studio 2017 RC 的最新文档,请参阅 。Visual c + + 编译器预定义某些预处理器宏,具体取决于语言 (C 或 c + +)、 编译目标,以及选择的编译器选项。Visual c + + 支持 ANSI/ISO C99 标准和 ISO C + + 14 标准所指定的所需预定义的预处理器宏。 该实现还支持几个更多特定于 Microsoft 的预处理器宏。 仅针对特定的生成环境或编译器选项定义一些宏,宏。 除非另有说明,宏的定义整个翻译单元如同它们指定为 /D 编译器选项参数。 在定义时,宏是由预处理器在编译前扩展为指定的值。 预定义的宏不采用任何参数,并且不能重新定义。编译器支持 ISO C99 和 ISO C + + 11 中指定此预定义的标识符。__func__ 为函数本地将封闭函数的未限定和未修饰名称 static``const 数组 char。
void example(){
printf("%s\n", __func__);
} // prints "example"
编译器支持 ISO C99 和 ISO C + + 14 标准所指定的这些预定义的宏。__cplusplus 翻译单元将作为 c + + 编译时定义为整数文字值。 否则,未定义。__DATE__ 当前源文件的编译日期。 日期是一个固定长度的字符串文字的窗体 Mmm dd yyyy。 月份名称 Mmm 等同于中的缩写的月份名称生成的 C 运行库日期
函数。 日期的第一个字符 dd 是一个空间,如果值是小于 10。 始终定义此宏。__FILE__ 当前源文件的名称。 __FILE__ 扩展到字符的字符串文字。 若要确保显示该文件的完整路径,请使用 。 始终定义此宏。__LINE__ 定义为当前源文件中的整数行号。 值 __LINE__ 宏可通过使用更改 #line 指令。 始终定义此宏。__STDC__ 定义为 1,仅当作为 C 编译,如果
指定编译器选项。 否则,未定义。__STDC_HOSTED__ 定义为 1,如果实现是 承载实现, ,属于支持整个所需的标准库的支持。 否则,定义为 0。__STDCPP_THREADS__ 定义为 1,当且仅当一个程序可以有多个线程的执行,并且编译为 c + +。 否则,未定义。__TIME__ 预处理过的翻译单元的转换的时间。 时间是字符的字符串文字的窗体 ︰ 分︰ 秒, ,由 C 运行时库返回的时间相同
函数。 始终定义此宏。Microsoft Visual c + + 支持这些其他预定义的宏。__ATOM__ 定义为 1 时
设置编译器选项和编译器目标是 x86 或 x64。 否则,未定义。__AVX__ 定义为 1 时
设置编译器选项和编译器目标是 x86 或 x64。 否则,未定义。__AVX2__ 定义为 1 时
设置编译器选项和编译器目标是 x86 或 x64。 否则,未定义。_CHAR_UNSIGNED 默认值定义为 1 如果 char 类型是无符号。 此值设置时
设置编译器选项。 否则,未定义。__CLR_VER 定义为整数文字表示在已编译的应用程序时使用的公共语言运行时版本。 在窗体中编码的值 Mmmbbbbb, ,其中 M 是运行时,主要版本 mm 是运行时的次要版本和 bbbbb 为内部版本号。 __CLR_VER 如果定义
设置编译器选项。 否则,未定义。
// clr_ver.cpp
// compile with: /clr
using namespace S
int main() {
Console::WriteLine(__CLR_VER);
_CONTROL_FLOW_GUARD 定义为 1 时
设置编译器选项。 否则,未定义。__COUNTER__ Expands 为整数文字,从 0 开始的和每次在源文件中使用,就会递增 1,或者包含的源文件标头。 __COUNTER__ 会记住其状态时使用预编译的头。 始终定义此宏。此示例使用 __COUNTER__ 要分配给同一类型的三个不同的对象的唯一标识符。
exampleClass 构造函数采用一个整数作为参数。 在 main, ,应用程序声明了三个对象类型的 exampleClass, ,并使用 __COUNTER__ 用作唯一标识符参数︰
// macro__COUNTER__.cpp
// Demonstration of __COUNTER__, assigns unique identifiers to
// different objects of the same type.
// Compile by using: cl /EHsc /W4 macro__COUNTER__.cpp
#include &stdio.h&
class exampleClass {
int m_nID;
// initialize object with a read-only unique ID
exampleClass(int nID) : m_nID(nID) {}
int GetID(void) { return m_nID; }
int main()
// __COUNTER__ is initially defined as 0
exampleClass e1(__COUNTER__);
// On the second reference, __COUNTER__ is now defined as 1
exampleClass e2(__COUNTER__);
// __COUNTER__ is now defined as 2
exampleClass e3(__COUNTER__);
printf("e1 ID: %i\n", e1.GetID());
printf("e2 ID: %i\n", e2.GetID());
printf("e3 ID: %i\n", e3.GetID());
// ------------------------------
// e1 ID: 0
// e2 ID: 1
// e3 ID: 2
__cplusplus_cli 定义为整数文字值 200406 在作为 c + + 编译时和 , ,, ,或
设置编译器选项。 否则,未定义。 在定义时, __cplusplus_cli 有效范围是整个翻译单元。
// cplusplus_cli.cpp
// compile by using /clr
#include "stdio.h"
int main() {
#ifdef __cplusplus_cli
printf("%d\n", __cplusplus_cli);
printf("not defined\n");
__cplusplus_winrt 定义为整数文字值 201009 在作为 c + + 编译时和
设置编译器选项。 否则,未定义。_CPPRTTI 定义为 1 如果
设置编译器选项。 否则,未定义。_CPPUNWIND 定义为 1,如果一个或多个 , ,, ,或
设置编译器选项。 否则,未定义。_DEBUG 定义为 1 时 , ,, ,或
设置编译器选项。 否则,未定义。_DLL 定义为 1 时
设置 (多线程 DLL) 编译器选项。 否则,未定义。__FUNCDNAME__ 定义为一个字符串,它包含
将封闭函数。 仅在函数内定义宏。
__FUNCDNAME__ 如果您使用不扩展宏
编译器选项。此示例使用 __FUNCDNAME__, ,__FUNCSIG__, ,和 __FUNCTION__ 宏来显示函数信息。
// Demonstrates functionality of __FUNCTION__, __FUNCDNAME__, and __FUNCSIG__ macros
void exampleFunction()
printf("Function name: %s\n", __FUNCTION__);
printf("Decorated function name: %s\n", __FUNCDNAME__);
printf("Function signature: %s\n", __FUNCSIG__);
// Sample Output
// -------------------------------------------------
// Function name: exampleFunction
// Decorated function name: ?exampleFunction@@YAXXZ
// Function signature: void __cdecl exampleFunction(void)
__FUNCSIG__ 定义为一个字符串,它包含封闭函数的签名。 仅在函数内定义宏。
__FUNCSIG__ 如果您使用不扩展宏
编译器选项。 当针对 64 位目标编译,调用约定是 __cdecl 默认情况下。 有关用法的示例,请参阅 __FUNCDNAME__ 宏。__FUNCTION__ 定义为包含封闭函数的未修饰的名称的字符串文字。 仅在函数内定义宏。
__FUNCTION__ 如果您使用不扩展宏
编译器选项。 有关用法的示例,请参阅 __FUNCDNAME__ 宏。_INTEGRAL_MAX_BITS 为整数文字值 64 的定义、 非向量整型的最大大小 (以位为单位)。 始终定义此宏。
// integral_max_bits.cpp
#include &stdio.h&
int main() {
printf("%d\n", _INTEGRAL_MAX_BITS);
__INTELLISENSE__ 定义为 1 期间 IntelliSense 编译器将传递在 Visual Studio IDE 中。 否则,未定义。 可以使用此宏来保护的代码 IntelliSense 编译器不了解,或使用它来生成和智能感知编译器之间切换。 有关详细信息,请参阅 。_ISO_VOLATILE 为 1 如果定义
设置编译器选项。 否则,未定义。_KERNEL_MODE 为 1 如果定义
设置编译器选项。 否则,未定义。_M_AMD64 定义为整数文字值 100 的编译该面向 x64 处理器。 否则,未定义。_M_ARM 为整数文字值 7 面向 ARM 处理器的编译进行定义。 否则,未定义。_M_ARM_ARMV7VE 定义为 1 时
面向 ARM 处理器的编译进行设置编译器选项。 否则,未定义。_M_ARM_FP 定义为整数文字值,该值指示该
编译器选项已设置,如果编译目标,则 ARM 处理器。 否则,未定义。如果不是 30-39 的范围中 /arch ARM 选项已指定,对于 ARM 中指示的默认体系结构已设置 (VFPv3)。在范围内 40-49 if /arch: vfpv4 设置。请参阅
有关详细信息。_M_ARM64 定义为 1 的面向 64 位 ARM 处理器的编译。 否则,未定义。_M_CEE 定义为 001 如果任何
设置编译器选项。 否则,未定义。_M_CEE_PURE 定义为 001 if
设置编译器选项。 否则,未定义。_M_CEE_SAFE 定义为 001 if
设置编译器选项。 否则,未定义。_M_FP_EXCEPT 定义为 1 如果
设置编译器选项。 否则,未定义。_M_FP_FAST 定义为 1 如果
设置编译器选项。 否则,未定义。_M_FP_PRECISE 定义为 1 如果
设置编译器选项。 否则,未定义。_M_FP_STRICT 定义为 1 如果
设置编译器选项。 否则,未定义。_M_IX86 定义为整数文字值 600 的编译该面向 x86 处理器。 没有为 x64 或 ARM 编译目标定义此宏。_M_IX86_FP 定义为整数文字值,该值指示
编译器选项的设置,则默认值。 此宏始终定义的编译目标时 x86 处理器。 否则,未定义。 在定义时,其值为︰0 /arch:IA32 编译器选项已设置。1 如果 /arch:SSE 编译器选项已设置。2 如果 /arch:SSE2, ,/arch:AVX 或 /arch: avx2 可以 编译器选项已设置。 如果此值为默认值 /arch 未指定编译器选项。 当 /arch:AVX 指定,则该宏 __AVX__ 也进行了定义。 当 /arch: avx2 可以 指定,则同时 __AVX__ 和 __AVX2__ 还定义了。请参阅
有关详细信息。_M_X64 定义为整数文字值 100 的编译该面向 x64 处理器。 否则,未定义。_MANAGED 指 1
设置编译器选项。 否则,未定义。_MSC_BUILD 定义为整数文字,其中包含编译器的版本号的修订号元素。 修订版本号是版本号的句点分隔的第四个元素。 例如,如果 Visual c + + 编译器的版本号为 15.00.20706.01, _MSC_BUILD 宏计算结果为 1。 始终定义此宏。_MSC_EXTENSIONS 定义为 1 如果
设置编译器选项,这是默认设置。 否则,未定义。_MSC_FULL_VER 定义为整数文本进行编码主要,次版本号和内部数字元素的数目的编译器的版本号。 主版本号是句点分隔的版本号的第一个元素、 次版本号是第二个元素和内部版本号是第三个元素。 例如,如果 Visual c + + 编译器的版本号为 15.00.20706.01, _MSC_FULL_VER 宏计算结果为 。 输入 cl /? 通过在命令行查看编译器的版本号。 始终定义此宏。_MSC_VER 作为整形文本进行编码编译器的版本号的主要和次要数字元素定义。 主版本号是句点分隔的版本号的第一个元素和次版本号是第二个元素。 例如,如果 Visual c + + 编译器的版本号为 17.00.51106.1, _MSC_VER 宏计算结果为 1700年。 输入 cl /? 通过在命令行查看编译器的版本号。 始终定义此宏。_MSVC_LANG 定义为一个整数,指定由编译器针对 c + + 语言标准。 如果宏时编译为 c + +,为整数型值 201402
编译器选项是否设置,默认情况下,它是设置为更高时,未指定时,值
设置编译器选项。 否则,该宏是不确定的。
_MSVC_LANG 宏和
编译器选项是在 Visual Studio 2015 更新 3 开始。__MSVC_RUNTIME_CHECKS 定义为 1,如果其中的
设置编译器选项。 否则,未定义。_MT 定义为 1 时
(多线程 DLL) 或
指定 (多线程)。 否则,未定义。_NATIVE_WCHAR_T_DEFINED 定义为 1 时
设置编译器选项。 否则,未定义。_OPENMP 定义为整数文字 200203 表示由 Visual c + + 中实现的 OpenMP 规范的日期,如果
设置编译器选项。 否则,未定义。
// _OPENMP_dir.cpp
// compile with: /openmp
#include &stdio.h&
int main() {
printf("%d\n", _OPENMP);
_PREFAST_ 定义为 1 时
设置编译器选项。 否则,未定义。__TIMESTAMP__ 作为一个字符串,它包含的日期和时间的当前源文件返回的 C 运行库的缩写,常量长度窗体的上次修改定义
正常工作,例如, Fri 19 Aug 13:32:58 2016。 始终定义此宏。_VC_NODEFAULTLIB 定义为 1 时
设置编译器选项。 否则,未定义。_WCHAR_T_DEFINED 定义为 1 时默认
设置编译器选项。
_WCHAR_T_DEFINED 宏定义,但如果不具有任何值 /Zc:wchar_t- 设置编译器选项,并 wchar_t 项目中包含的系统标头文件中定义。 否则,未定义。_WIN32 定义为 1 时编译目标是 32 位 ARM x86,在 64 位 ARM 或 x64。 否则,未定义。_WIN64 编译目标为 64 位 ARM 或 x64 时定义为 1。 否则,未定义。_WINRT_DLL 定义为 1 时编译为 c + + 和
设置编译器选项。 否则,未定义。用于确定 ATL 或 MFC 库版本的预处理器宏不是由编译器预定义的。 因此它们未定义的预处理器指令中包含必需的标头之前,这些宏的定义在库的标头。_ATL_VER & atldef.h & 中定义为整数文本进行编码的 ATL 版本编号。_MFC_VER & afxver_.h & 中定义为整数文本进行编码的 MFC 版本编号。
此页面有帮助吗?
更多反馈?
1500 个剩余字符
我们非常感谢您的反馈。您所在的位置: &
2.1.2 __func__预定义标识符
2.1.2 __func__预定义标识符
Michael Wong IBM XL编译器中国开发团队
机械工业出版社
《深入理解C++11:C++11新特性解析与应用》第2章保证稳定性和兼容性,本章中的新特性基本上都遵循了该设计思想。本节为大家介绍__func__预定义标识符。
2.1.2 __func__预定义标识符
很多现实的编译器都支持C99标准中的__func__ 预定义标识符功能,其基本功能就是返回所在函数的名字。我们可以看看下面这个例子,如代码清单2-2所示。
代码清单2-2
#include&&#include&&using&namespace& &const&char*&hello()&{&return&__func__;&} &const&char*&world()&{&return&__func__;&} &&int&main(){ &&&&&cout&&()&&&,&&&&()&&;&//&hello,&world &} &&//&编译选项:g++&-std=c++11&2-1-2.cpp&
在代码清单2-2中,我们定义了两个函数hello和world。利用__func__预定义标识符,我们返回了函数的名字,并将其打印出来。事实上,按照标准定义,编译器会隐式地在函数的定义之后定义__func__标识符。比如上述例子中的hello函数,其实际的定义等同于如下代码:
const&char*&hello()&{ &&&&&static&const&char*&__func__&=&&hello&; &&&&&return&__func__; &}&
__func__预定义标识符对于轻量级的调试代码具有十分重要的作用。而在C++11中,标准甚至允许其使用在类或者结构体中。我们可以看看下面这个例子,如代码清单2-3所示。
代码清单2-3
#include&&using&namespace& &&struct&TestStruct&{ &&&&&TestStruct&()&:&name(__func__)&{} &&&&&const&char&* &}; &&int&main()&{ &&&&&TestStruct& &&&&&cout&&&&;&&&&//&TestStruct &} &//&编译选项:g++&-std=c++11&2-1-3.cpp&
从代码清单2-3可以看到,在结构体的构造函数中,初始化成员列表使用__func__预定义标识符是可行的,其效果跟在函数中使用一样。不过将__fun__标识符作为函数参数的默认值是不允许的,如下例所示:
void&FuncFail(&string&func_name&=&__func__)&{};//&无法通过编译&
这是由于在参数声明时,__func__还未被定义。【责任编辑: TEL:(010)】&&&&&&
关于&&的更多文章
HTML 语言是当今网页设计的主流表现语言,CSS 是当今网页设计的
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
Web 2.0技术对传统界面设计的创新和变革,直接影响着
每天,Google都要测试和发布数百万个源文件、亿万行的
DSL(领域专用语言)的要旨在于沟通。精心设计的DSL
本书深入浅出地阐述了计算机网络技术的基本原理,介绍了当前常用的先进网络技术以及网络的实际应用知识。全书主要内容包括计算机
51CTO旗下网站

我要回帖

更多关于 c语言预定义标识符 的文章

 

随机推荐