zoukankan      html  css  js  c++  java
  • 预编译


    (1)      宏定义

    1.不带参数的宏定义

    用一个宏名代替一个字符串,只进行简单的代换,不进行任何计算,也不进行正确性检查,双引号内的宏名不进行代换,宏名一般用大写表示。

    #define PI 3.1415926

    #define定义有效范围是定义处到源文件结束,通常写在文件开头,函数前,在此文件内有效。

    #define PI 3.1415926

    int main()

    {

      return 0;

    }

    int main()

    {

      #define PI 3.1415926

     return 0;

    }

    可以用#undef命令结束作用域。

    #define PI 3.1415926

    int main()

    {

      return 0;

    }

    #undef PI

    进行宏定义时,可以用已定义宏名,层层代换。

    #define R 1

    #define PI 3.1415926

    #define L2*PI*R

    2.带参数的宏定义

    #define 宏名(参数表) 宏体

    #define MUL(a, b) a*b

    #define ADD(x, y) x+y

    eg:sum = ADD(1, 2); 则被替换成sum = 2 + 4;

      sum = ADD(a+2, b+3);  sum = a + 2 + b + 3;

      t =MUL(a+1, b+1);  t = a+1*b+1;

    注意:宏名与左括号之间不能出现空格。字符串中与参数名相同的字符序列适当的加上圆括号,这样可以避免代换后优先级上产生问题。

    eg:#define MUL(x) (x)*(x)

    #define MUL(x)((x)*(x))

    (2)条件编译

    利用条件编译可以使同一个源程序在不同条件下产生不同代码,来完成不同功能。利用条件编译可在调试程序时添加一些调试语句,以达到跟踪目的,但程序调试好后,重新编译时,使调试语句不参与编译。

    1.#ifdef 宏名

         程序段1

     (#else  程序段2)

    #endif

    其功能为如果宏名已定义,则编译程序段1,否则程序段2.可提高程序通用性。

    eg:#ifdef COMPUTER

         #define INTEGER_SIZE 16

    #else

      #define INTEGER_SIZE 32

    #endif

    只要COMPUTER被宏定义过,则编译后INTEGER_SIZE被 16代替。

    2. #ifdnef 宏名

         程序段1

     (#else  程序段2)

    #endif

    如果宏名没被定义则编译程序段1

    3.#if 表达式

        程序段1

     [#else 程序段2]

    #endif

    表达式是一个常量表达式,其功能为:如果表达式的值不为0,则编译程序段1;否则,段2,各种条件编译可嵌套使用。

    eg:#if x > 4

         #if x > 4 && x < 8

             int x = 5;

         #else

             int x = 2;

         #endif

    #else

      int x = 100;

    #endif

      

  • 相关阅读:
    Oracle优化器:星型转换
    Latches and Tuning:Buffer Cache
    [转]Oracle销售人员普遍腐败?
    Veritas ODM Async and Oracle
    How to set LOGSOURCE PATHMAP on GoldenGate
    Merry Christmas Sql Statement
    Goldengate OGG常见问题与错误列表
    Sqlserver 2005 配置 数据库镜像:1418错误:该错误很可能是安全方面的配置问题引起的
    Sqlserver 2005 配置 数据库镜像:为镜像准备镜像数据库 (TransactSQL)
    Sqlserver 2005 配置 数据库镜像:概述
  • 原文地址:https://www.cnblogs.com/seebro/p/2476525.html
Copyright © 2011-2022 走看看