ref: http://www.cplusplus.com/doc/tutorial/preprocessor/

concolusion:

directives:

#define #undef

#include

#if #else #elif #endif #ifdef #ifndef

#error ( #warning is NOT A STANDARD DIRECTIVE,  since not shown in the page above, but most compilers have it. more: http://stackoverflow.com/questions/171435/portability-of-warning-preprocessor-directive )

#line

#pragma ( all compiler support #pragma to set options, but "These options are specific for the platform and the compiler you use.", so no standard options.)

macros:

__LINE__

__FILE__

__DATE__

__TIME__

(__FUNCTION__ is NOT STANDARD MACRO. __FUNCTION__ is defined on both MSVC & GCC; GCC better use __PRETTY_FUNCTION__. c99 has standard __func__)

__cplusplus (has a value to identifying C++98 / 11 )

__STD_HOSTED__

optional: __STDC__ __STDC_VERSION__ __STDC_MB_MIGHT_NEQ_WC__ __STDC_ISO_10646__ __STDCPP_STRICT_POINTER_SAFETY__ __STDCPP_THREADS__

Example of use non standard macros (compiler specific) in Blade:

 /********************************************************************
created: 2009/02/07
filename: Platform.h
author: Crazii purpose: the platform dependent definitions
*********************************************************************/
#ifndef __Blade_Platform_h__
#define __Blade_Platform_h__ /************************************************************************/
/* processor unit */
/************************************************************************/
#define BLADE_PROCESSOR_X86 (0)
#define BLADE_PROCESSOR_IA64 (1)
#define BLADE_PROCESSOR_PPC (2)
#define BLADE_PROCESSOR_ARM (3) #if defined ARM || defined __arm__ || defined _ARM
# define BLADE_PROCESSOR BLADE_PROCESSOR_ARM #elif defined __ia64 || defined _M_IA64 || defined __ia64__
# define BLADE_PROCESSOR BLADE_PROCESSOR_IA64 #elif defined __X86__ || defined __i386__ || defined i386 || defined _M_IX86 || defined __386__ || defined __x86_64__ || defined _M_X64
# define BLADE_PROCESSOR BLADE_PROCESSOR_X86 #elif defined __PPC__ || defined __POWERPC__ || defined powerpc || defined _POWER || defined __ppc__ || defined __powerpc__ || defined _M_PPC
# define BLADE_PROCESSOR BLADE_PROCESSOR_PPC #else
# error "processor not supported yet."
#endif /************************************************************************/
/* this is the system specific,windows and linux, etc */
/************************************************************************/ #define BLADE_PLATFORM_WINDOWS (0)
#define BLADE_PLATFORM_WINPHONE (1) #define BLADE_PLATFORM_LINUX (2)
#define BLADE_PLATFORM_ANDROID (3)
#define BLADE_PLATFORM_IOS (4)
#define BLADE_PLATFORM_MAC (5) #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) # define BLADE_PLATFORM BLADE_PLATFORM_WINDOWS #elif defined(WP8) && defined(_WP8) # define BLADE_PLATFORM BLADE_PLATFORM_WINPHONE #elif defined(ANDROID) || defined(__ANDROID__)//since android will also define __linux__, we need check android first #define BLADE_PLATFORM BLADE_PLATFORM_ANDROID #elif defined(__linux__) # define BLADE_PLATFORM BLADE_PLATFORM_LINUX #else
# error "current system not support yet."
#endif //Careful on using those class system definition. different system may have different APIs.
//i.e. Unix POSIX version difference, windows Desktop/Mobile API differences. #if defined(__unix__)
# define BLADE_IS_UNIX_CLASS_SYSTEM
#else
# define BLADE_IS_UNIX_CLASS_SYSTEM
#endif #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) || defined(_WIN32_WCE) || defined(WINRT) || defined(_WINRT) || defined(WP8) || defined(_WP8)
# define BLADE_IS_WINDOWS_CLASS_SYSTEM
#else
# define BLADE_IS_WINDOWS_CLASS_SYSTEM
#endif /************************************************************************/
/* Architecture (32/64 bit) */
/************************************************************************/ #define BLADE_ARCHITECTURE_32BIT (0)
#define BLADE_ARCHITECTURE_64BIT (1) #if defined(__x86_64__) || defined(_M_X64) || defined(_M_IA64) || defined(_M_AMD64) || defined(__powerpc64__) || defined(__alpha__) || defined(__ia64__) || defined(__s390__) || defined(__s390x__)
# define BLADE_ARCHITECTURE BLADE_ARCHITECTURE_64BIT
# define BLADE_MEMORY_ALIGNMENT ()
#else
# define BLADE_ARCHITECTURE BLADE_ARCHITECTURE_32BIT
# define BLADE_MEMORY_ALIGNMENT ()
#endif /************************************************************************/
/* this is the compiler specific ,MSVC and GCC currently supported */
/************************************************************************/
#define BLADE_COMPILER_MSVC (0)
#define BLADE_COMPILER_GNUC (1) #if defined(_MSC_VER)
# define BLADE_COMPILER BLADE_COMPILER_MSVC
# define BLADE_ALIGNED(n) __declspec(align(n))
# define BLADE_CDECL __cdecl
# define BLADE_STDCALL __stdcall
# define BLADE_FASTCALL __fastcall
# define BLADE_FUNCTION __FUNCTION__
# define BLADE_ALLWAYS_INLINE __forceinline
#elif defined(__GNUC__)
# define BLADE_COMPILER BLADE_COMPILER_GNUC
# define BLADE_ALIGNED(n) __attribute__((aligned(n)))
# define BLADE_CDECL __attribute__((cdecl))
# define BLADE_STDCALL __attribute__((stdcall))
# define BLADE_FASTCALL __attribute__((fastcall))
# define BLADE_FUNCTION __PRETTY_FUNCTION__
# define BLADE_ALLWAYS_INLINE __attribute__((always_inline))
#else
# error "Compiler not supported yet."
# define BLADE_ALLWAYS_INLINE inline
#endif #if defined(_DEBUG) || defined(DEBUG)
# define BLADE_DEBUG
#else
# define BLADE_DEBUG
#endif #define BLADE_ENDIAN_LITTLE 0
#define BLADE_ENDIAN_BIG 1 //endian macros
//HOWTO: ARM processor can have dynamic endian with endian map, how to check? #if BLADE_PROCESSOR == BLADE_PROCESSOR_X86 || \
BLADE_PROCESSOR == BLADE_PROCESSOR_ARM #define BLADE_ENDIAN BLADE_ENDIAN_LITTLE #else #define BLADE_ENDIAN BLADE_ENDIAN_BIG #endif //make unicode macro having a value
#if defined(UNICODE) || defined(_UNICODE)
# undef UNICODE
# define UNICODE
# define BLADE_UNICODE
#else
# define BLADE_UNICODE
#endif #endif // __Blade_Platform_h__

Cross Platform Note: STD C++ Preprocessor directives & pre-defined macros的更多相关文章

  1. “CMake”这个名字是“cross platform make”

    cmake_百度百科 https://baike.baidu.com/item/cmake/7138032?fr=aladdin CMake 可以编译源代码.制作程序库.产生适配器(wrapper). ...

  2. V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245.1)

    V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245. ...

  3. Comparing Xamarin and Delphi XE5 to Xcode for Cross Platform Mobile App Development

    Comparing Xamarin and Delphi XE5 to Xcode for Cross Platform Mobile App Development If you are consi ...

  4. Gtest:Using visual studio 2017 cross platform feature to compile code remotely

    参考:使用Visual Studio 2017作为Linux C++开发工具 前言 最近在学Gtest单元测试框架,由于平时都是使用Source Insight写代码,遇到问题自己还是要到Linux下 ...

  5. Cross platform GUI for creating SSL certs with OpenSSL

    Someone said: from : https://micksmix.wordpress.com/2012/08/09/xca-cross-platform-gui-for-creating-s ...

  6. Cross platform

    值得学习的C/C++语言开源项目 (1)ACE 庞大.复杂,适合大型项目.开源.免费,不依赖第三方库,支持跨平台. http://www.cs.wustl.edu/~schmidt/ACE.html ...

  7. Qt编程之Qt样例表(QSS)

    For a long time, Qt has allowed you to decorate your GUIs with CSS’ish style sheets. Inspired by the ...

  8. c++11-17 模板核心知识(二)—— 类模板

    类模板声明.实现与使用 Class Instantiation 使用类模板的部分成员函数 Concept 友元 方式一 方式二 类模板的全特化 类模板的偏特化 多模板参数的偏特化 默认模板参数 Typ ...

  9. Visual Studio 2015 Pre Secondary Installer 在哪里

    安装vs2015 pre后,会自动打开Secondary Installer, 用于Cross Platform的移动开发框架,包括Cordova插件.若安装失败,启动程序位置: "D:\P ...

随机推荐

  1. 2、CentOS下编译安装Python2.7.6(转)

    CentOS系统下面Python在升级到2.7.6的时候,没有找到安装包直接安装,只能通过源代码编译的方式来安装Python 2.7.6版本.这篇是编译和安装Python2.7.6的过程记录. Cen ...

  2. 20175224 2018-2019-2 《Java程序设计》第四周学习总结

    教材学习内容总结 子类的定义 class 子类名 extends 父类名 { ... } 子类继承性 子类继承父类的成员变量.方法.成员变量可以被子类中自己定义的任何实例方法操作:继承的方法可以被子类 ...

  3. pdf.js使用总结#如何在网页读取并显示PDF格式文档

    pdf.js可以实现在html下直接浏览pdf文档,是一款开源的pdf文档读取解析插件 pdf.js主要包含两个库文件,一个pdf.js和一个pdf.worker.js,一个负责API解析,一个负责核 ...

  4. python中filter,reduce,map的用法

    filter的用法: 操作表list的内嵌函数'filter' 需要一个函数与一个list它用这个函数来决定哪个项应该被放入过滤结果队列中遍历list中的每一个值,输入到这个函数中如果这个函数返回Tr ...

  5. 前端特效demo | 值得收藏的6个 HTML5 Canvas 实用案例

    HTML5 动画在Canvas 上得到了充分的发挥,我们 VIP 视频也分享过很多相关的动画特效制作视频,这次给大家带来 6 款超炫酷的HTML5 canvas 动画的 demo,一起来看看吧~ 文内 ...

  6. nim调用GetSystemPowerStatus判断笔记本电脑是否接通外接电源

    title: nim调用GetSystemPowerStatus判断笔记本电脑是否接通外接电源 tags:nim,winapi,dll --- 转载条件:如果你需要转载本文,你需要做到完整转载本文所有 ...

  7. 通过SSH去连接 github 和bitbucket

    github 和 bitbucket 都是项目托管服务器, 1 创建SSH private key and public key 首先需要安装git命令, 并且请检查是否有ssh 命令. 打开 Git ...

  8. 高精度加法——经典题 洛谷p1601

    题目背景 无 题目描述 高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b] 输入输出格式 输入格式: 分两行输入a,b<=10^500 ...

  9. Ionic 2 + 手动搭建开发环境教程 【转】

    ionic简介 为什么选用ionic: 彻底开源且免费 性能优异 基于红的发紫的AngularJs 漂亮的UI 强大的命令行(基于更热门的nodejs) 开发团队非常活跃. ngCordova,将主流 ...

  10. [mock open]PyUnit执行单元测试时使用字符串模拟文件对象

    def mock_open(data): from StringIO import StringIO stmp = StringIO(data) return stmp _open = __built ...