您的位置:首页 > 编程语言 > C语言/C++

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__));


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: