#define与typedef 的区别及C预处理器

来源:互联网 发布:ubuntu分区图文教程 编辑:程序博客网 时间:2024/05/18 00:36
#define与typedef 的区别

#define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同:


1、typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 ONE 为1。
例:
      typedef  unsigned char  elem_type;     

      #define  unsigned char  elem_type;     
    
      typedef  ONE  1;                                ×
      #define  ONE  0;                                ×
      #define  ONE  0                                   

2、typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。

C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器(C Preprocessor)简写为 CPP。

所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始。下面列出了所有重要的预处理器指令:

指令描述#define定义宏#include包含一个源代码文件#undef取消已定义的宏#ifdef如果宏已经定义,则返回真#ifndef如果宏没有定义,则返回真#if如果给定条件为真,则编译下面代码#else#if 的替代方案#elif如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码#endif结束一个 #if……#else 条件编译块#error当遇到标准错误时,输出错误消息#pragma使用标准化方法,向编译器发布特殊的命令到编译器中