zoukankan      html  css  js  c++  java
  • C89:论预处理命令

    一.宏替换/宏定义(#define)

    1.作用

    在编译预处理时,对于程序出现的宏名,都用宏定义去替换常量值(字符串或数字)或者表达式,这称为宏展开.

    宏定义是由源程序的宏定义完成的,宏展开是由预处理程序自动完成.

    宏定义不做语法检查,预处理实在编译之前的处理,而编译的工作之一就是语法检查

    宏替换不占用程序运行时间

    源文件每一行只能有一条预处理命令,多行可用反斜杠'/'

    预处理指令可以放在程序的任意一行

    2.宏定义的优点

    (1)方便程序修改

    一般用无参形式的宏定义来替换常量值(字符串或数字)或者表达式

    (2)提高程序运行效率

    一般用带参形式的宏定义来完成简单的函数运算

    3.形式

    1.无参形式

    #define 标识符  常量值(字符串或数字)或者表达式

    //宏定义不是语句,不用加分号结尾
    #define M (a+b)
    
     2.带参形式

    #define 宏名(形参表)  常量值(字符串或数字)或者表达式

    #define MAX(a,b) ((a>b)?(a):(b))
    

    二.条件编译

    注意:这段话只对.c文件有用,如果是.cpp文件,必须加上extern才能解决相互包含头文件导致全局变量冲突的问题

    //通过条件编译来避免重复包含头文件
    #ifndef __headerfileXXX__
    #define __headfileXXX__
    ...
    文件内容
    ...
    #endif
    

    三.extern "c"

    使用extern "c"的作用是让C++能够调用C写的模块库文件

    但是我们现在自己写的都是.cpp生成的C++源文件,只有很老的代码才是纯C写的,所以很少会用到,一般用于模块接口

    四.#undef

    #define WIDTH 80
    #define ADD( X, Y ) ((X) + (Y))
    .
    .
    .
    #undef WIDTH
    #undef ADD
    

    五.#pragma once

    由于编译器每次都需要打开头文件才能判定是否有重复定义,因此在编译大型项目时,#ifndef会使得编译时间相对较长,因此一些编译器逐渐开始支持#pragma once的方式

  • 相关阅读:
    VB中String的用法及原理
    SQL中的left outer join,inner join,right outer join用法详解
    SqlServer,Oracle 常用函数比较
    sql 使用视图的好处
    修改数据库的兼容级别
    sql server2008修改登录名下的默认架构名
    SQL事务回滚 ADO BeginTrans, CommitTran 以及 RollbackTrans 方法
    sql事务(Transaction)用法介绍及回滚实例
    SQL Server更新表(用一张表的数据更新另一张表的数据)
    VB如何连接SQL Server数据库
  • 原文地址:https://www.cnblogs.com/k5bg/p/11120129.html
Copyright © 2011-2022 走看看