C++标准库(预处理器)
2015-07-03 14:04
239 查看
1. 预处理器:
1.1 使用#代表返回一个带引号的字符串,如:
#define to_string(s) #s
to_string(hello); 可以表示成"hello"
1.2 使用##代表连接前后的内容,如:
#define concatenate( x, y ) x##y
concatenate(5,2);可以表示成52
1.3 #if, #ifdef, #ifndef, #else, #elif, #endif ,#if defined,!defined均可以
1.4 #line
#line命令用于更改__LINE__和__FILE__的值,而这两个值一般用于调试输出信息,如输出出错的行和文件信息
如果使用默认的__LINE__,则直接取用即可,不用使用#line进行更改,如assert的实现中会使用这两个值,另外__FILE__取用的不是unicode类型,可以
使用宏_CRT_WIDE(__FILE__)进行转换,宏_CRT_WIDE内部即在前面加了个L进行转换,也可以自己写宏,如:
#define test2(_String) L ## _String
#define test1(_String) test2(_String)
strShow.Format(L"the line is :%d, filename is: %s", __LINE__, test1(__FILE__));
1.5 #pragma
比较复杂,功能强大,如可以用于消除编译器警告:
#pragma warning(disable:4507 34) // 不显示4507和34号警告信息
#pragma warning(once:4385) // 4385号警告信息仅报告一次
#pragma warning(error:164) // 把164号警告信息作为一个错误。
另如:
#pragma once 编译一次
#pragma warning(push)// 保存当前编译器警告级别。这样在下面设置了disable警告级别后,再在最下面恢复警告级别。防止影响其它代码的警告信息
#pragma warning(disable: 4702)
...
#pragma warning(pop)
#pragma comment(lib, "hcnetsdk.lib"); //加载lib库
//设置共享数据段
#pragma data_seg( "Shared ")
HHOOK g_hhook = NULL;
DWORD g_dwThreadIdDIPS = 0;
#pragma data_seg()
1.6 #undef
取消前面#define的一个值
1.7
__LINE__ 和 __FILE__ 变量表示正在处理的当前行和当前文件.
__DATE__ 变量表示当前日期,格式为month/day/year(月/日/年).
__TIME__ 变量描述当前的时间,格式为hour:minute:second(时:分:秒).
_cplusplus 变量只在编译一个C++程序时定义.
__STDC__ 变量在编译一个C程序时定义,编译C++时也有可能定义.
strDataAndTime.Format(L"Date:%s,Time:%s", _CRT_WIDE(__DATE__), _CRT_WIDE(__TIME__));
1. 预处理器:
1.1 使用#代表返回一个带引号的字符串,如:
#define to_string(s) #s
to_string(hello); 可以表示成"hello"
1.2 使用##代表连接前后的内容,如:
#define concatenate( x, y ) x##y
concatenate(5,2);可以表示成52
1.3 #if, #ifdef, #ifndef, #else, #elif, #endif ,#if defined,!defined均可以
1.4 #line
#line命令用于更改__LINE__和__FILE__的值,而这两个值一般用于调试输出信息,如输出出错的行和文件信息
如果使用默认的__LINE__,则直接取用即可,不用使用#line进行更改,如assert的实现中会使用这两个值,另外__FILE__取用的不是unicode类型,可以
使用宏_CRT_WIDE(__FILE__)进行转换,宏_CRT_WIDE内部即在前面加了个L进行转换,也可以自己写宏,如:
#define test2(_String) L ## _String
#define test1(_String) test2(_String)
strShow.Format(L"the line is :%d, filename is: %s", __LINE__, test1(__FILE__));
1.5 #pragma
比较复杂,功能强大,如可以用于消除编译器警告:
#pragma warning(disable:4507 34) // 不显示4507和34号警告信息
#pragma warning(once:4385) // 4385号警告信息仅报告一次
#pragma warning(error:164) // 把164号警告信息作为一个错误。
另如:
#pragma once 编译一次
#pragma warning(push)// 保存当前编译器警告级别。这样在下面设置了disable警告级别后,再在最下面恢复警告级别。防止影响其它代码的警告信息
#pragma warning(disable: 4702)
...
#pragma warning(pop)
#pragma comment(lib, "hcnetsdk.lib"); //加载lib库
//设置共享数据段
#pragma data_seg( "Shared ")
HHOOK g_hhook = NULL;
DWORD g_dwThreadIdDIPS = 0;
#pragma data_seg()
1.6 #undef
取消前面#define的一个值
1.7
__LINE__ 和 __FILE__ 变量表示正在处理的当前行和当前文件.
__DATE__ 变量表示当前日期,格式为month/day/year(月/日/年).
__TIME__ 变量描述当前的时间,格式为hour:minute:second(时:分:秒).
_cplusplus 变量只在编译一个C++程序时定义.
__STDC__ 变量在编译一个C程序时定义,编译C++时也有可能定义.
strDataAndTime.Format(L"Date:%s,Time:%s", _CRT_WIDE(__DATE__), _CRT_WIDE(__TIME__));
相关文章推荐
- Effective C++学习笔记(Part One:Item 1-4)
- (C/C++)register关键字
- C语言排序:冒泡排序
- 【C语言的日常实践(十四)】constkeyword详细解释
- 将C#程序与调用的dll对应的C++源码联调的一种方法
- C语言函数指针实现接口思想
- 【C语言的日常实践(十二)】命令行参数
- 成C++应用程序世界------异常处理
- c++中const的各种用法
- 求矩阵之和c++
- C++ 字典排序 原理与实现
- C语言中联合体union的使用
- nes模拟器C++源码
- 【C语言】写一个函数,实现字符串内单词逆序
- 在Windows下用C++扩展PHP
- 【C语言】模拟实现strcmp函数
- 【C语言】模拟实现memmove函数(考虑内存重叠)
- 【C语言】模拟实现memcpy库函数
- C++字符串之间转化——多字节字符集
- 【 C语言】将一个数字按字符形式逐个输出,例如1234,输出为1 2 3 4