设为首页 加入收藏

TOP

C++预处理详解(四)
2014-03-10 12:54:13 来源: 作者: 【 】 浏览:352
Tags:处理 详解

 

  错误信息

  #error [message] 指示编译器报告错误,一般用于系统相关代码,例如检测操作系统类型,用条件编译里 #error 报告错误。例子如下:

  int main()

  {

  #error "w"

  return 0;

  #error

  }

  第2个 #error 可能不被执行,因为编译器可能在遇到一个 #error "w" 时就报错停止了。

  编译器预留指令

  #pragma 预处理指令是C++标准给特定C++实现预留的标准,所以,在不同的编译器上 #pragma 的参数及意义可能不同,例如 VC++2010 提供 #pragma once 来指示源文件只被处理一遍。OpenMP作为一个共享内存并行编程模型,使用 #pragma omp 指导语句。

  4. 预处理的典型应用

  预处理的常见使用有:

  Include guard,见wikipedia条目,该技术用来保证头文件仅被包含一次,以防止违反C++的"一次定义"原则;

  用 #ifdef 和特殊宏识别操作系统、处理器架构、编译器,条件编译,进而实现针对特定平台的功能,多用于可移植性代码;

  定义函数宏,以简化代码,或是方便修改某些配置;

  用 #pragma 设定和实现相关的配置(见上一节最后给出的链接)。

  sourceforge.net上有一个项目,是关于用宏检测操作系统、处理器架构、编译器(请点链接或见参考文献)。下面是一个例子(来自这里):

  #ifdef _WIN64

  //define something for Windows (64-bit)

  #elif _WIN32

  //define something for Windows (32-bit)

  #elif __APPLE__

  #include "TargetConditionals.h"

  #if TARGET_OS_IPHONE && TARGET_IPHONE_SIMULATOR

  // define something for simulator

  #elif TARGET_OS_IPHONE

  // define something for iphone

  #else

  #define TARGET_OS_OSX 1

  // define something for OSX

  #endif

  #elif __linux

  // linux

  #elif __unix // all unices not caught above

  // Unix

  #elif __posix

  // POSIX

  #endif

        

首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++对象占用内存大小的思考 下一篇C++ 类模板

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)
·TCP和UDP在socket编 (2025-12-26 02:20:32)
·有没有适合新手练习 (2025-12-26 01:48:47)
·用清华镜像网怎么下 (2025-12-26 01:48:44)