zoukankan      html  css  js  c++  java
  • 预定义宏_GNUC_ _MSC_VER

    一、预定义__GNUC__

        1 __GNUC__ gcc编译器编译代码时预定义的一个宏。需要针对gcc编写代码时, 可以使用该宏进行条件编译。

        2 __GNUC__ 的值表示gcc的版本。需要针对gcc特定版本编写代码时,也可以使用该宏进行条件编译。

        3 __GNUC__ 的类型是“int”,该宏被扩展后, 得到的是整数字面值。可以通过仅预处理,查看宏扩展后的文本。

    示例:

     

      #include <assert.h>
      #include <stdio.h>
      #include <typeinfo>   #ifndef __GNUC__
        #error sample for gcc compiler
      #else
        /* use gcc special extension: #warning , __attribute__, etc.  */
      #endif
      int main() 
      {    
        printf("hello gcc %d
    ",__GNUC__);    
        assert( typeid(__GNUC__)==typeid(int) );    
        printf("press Enter to exit
    ");    
        (void)getchar();
      }

     

    二、预定义_MSC_VER

        1 _MSC_VER是微软C/C++编译器——cl.exe编译代码时预定义的一个宏。需要针对cl编写代码时, 可以使用该宏进行条件编译。

        2 _MSC_VER的值表示cl的版本。需要针对cl特定版本编写代码时, 也可以使用该宏进行条件编译。

        3 _MSC_VER的类型是"int"。该宏被扩展后,得到的是整数字面值。可以通过仅预处理, 查看宏扩展后的文本。

    示例:

     

      /* _MSC_VER\_MSC_VER.cpp */
      #include <stdio.h>
       #include <stdlib.h>
       #include <typeinfo>
       #define TO_LITERAL(text) TO_LITERAL_(text)
       #define TO_LITERAL_(text) #text
       #ifndef _MSC_VER
         #error sample for msvc compiler
      #else
        /* use msvc special extension: #pragma message,__declspec,__stdcall,etc. */
        #pragma message("----------------------------------------
    ")
        #pragma message("----------------------------------------
    ")
        #pragma message("---------- hello msvc " TO_LITERAL(_MSC_VER) " -------------")
        #pragma message("
    ----------------------------------------
    ")
        #pragma message("----------------------------------------
    ")
        extern __declspec(dllimport) void __stdcall declare_but_dont_reference(void);
       #endif     
      int main()
      {    
        printf("hello msvc, version=%d
    ",_MSC_VER);    
        printf("typeof _MSC_VER="%s"
    ",typeid(_MSC_VER).name());    
        system("pause"); /* msvc only on windows? */    
        return 0;
      }

     

  • 相关阅读:
    http://www.cnblogs.com/fengyin/archive/2011/01/18/1938628.html 前端优化
    iframe中子父窗口互调的js方法
    Mydomain操作说明
    Struts中出现DispatchMapping[***] does not define a handler property 的解决办法
    MyEclipse 不编译了,无论怎么更改保存, classes目录下都是空的.
    checkstyle配置文件说明
    SQLite学习手册(数据类型)
    动态加载datagrid控件的一个问题
    sharepoint
    VS.net 的一个bug
  • 原文地址:https://www.cnblogs.com/1024incn/p/3875285.html
Copyright © 2011-2022 走看看