c语言预处理与typedef

一、预处理
1、如包含命令#include <stdio.h>,宏定义命令#define PI 3.1415926等。

在源程序中这些命令都放在函数之外,而且一般都放在源文件的前面,它们称为预处理部分。
2、 包含命令中的文件名可以用双引号括起来,也可以用尖括号括起来。例如以下写法都是允许的:
#include"stdio.h"
#include<math.h>

但是这两种形式是有区别的:使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找;

使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。用户编程时可根据自己文件所在的目录来选择某一种命令形式。
3、预处理程序提供了条件编译的功能。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。
#ifdef 标识符
程序段1
#else
程序段2
#endif
如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。
4、预处理功能是C语言特有的功能,它是在对源程序正式编译前由预处理程序完成的。在程序中用预处理命令来调用这些功能。
宏定义是用一个标识符来表示一个字符串,这个字符串可以是常量、变量或表达式。在宏调用中将用该字符串代换宏名。

宏定义可以带有参数,宏调用时是以实参代换形参。而不是“值传送”。
#define 宏名(形参表) 字符串
#define M(y) yy+3y //宏定义
……
k=M(5); //宏调用
……

为了避免宏代换时发生错误,宏定义中的字符串应加括号,字符串中出现的形式参数两边也应加括号。
二、typedef

  1. 为基本数据类型定义新的类型名
    typedef unsigned int COUNT;
  2. 为自定义数据类型(结构体、共用体和枚举类型)定义简洁的类型名称
    typedef struct tagPoint
    {
    double x;
    double y;
    double z;
    } Point;
  3. 为数组定义简洁的类型名称
    typedef int INT_ARRAY_100[100];
    INT_ARRAY_100 arr;
  4. 为指针定义简洁的名称
    对于指针,我们同样可以使用下面的方式来定义一个新的别名:
    typedef char* PCHAR;
    PCHAR pa;

#define是在预编译时处理的,它只能作简单的字符串替换,而typedef是在编译时处理的。实际上它并不是作简单的字符串替换,而是采用如同定义变量的方法那样来声明一个类型。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中的宏和typedef都是用于定义别名的机制,但它们的实现方式和使用方法有所不同。 宏定义(#define)是C语言中的一种预处理指令,它用于为各种数据类型、常量或函数定义别名。宏定义是由预处理器在编译之前进行处理的,它将源代码中的宏名称替换为相应的值或代码片段。宏定义的语法格式为:#define 宏名称 替换文本。例如,下面是一个简单的宏定义示例: ```c #define TRUE 1 #define FALSE 0 int main() { printf("TRUE 的值: %d\n", TRUE); printf("FALSE 的值: %d\n", FALSE); return 0; } ``` 在上面的示例中,宏定义将TRUE和FALSE分别替换为1和0。在程序中使用宏名称预处理器会将其替换为相应的值。这样可以提高代码的可读性和维护性。 typedefC语言中的一种类型定义关键字,它用于为已有的数据类型定义新的别名。typedef是由编译器在编译过程中执行解释的,它将一个已有的数据类型重新命名为一个新的类型名称。typedef的语法格式为:typedef 已有类型 新类型名称。例如,下面是一个typedef的示例: ```c typedef unsigned long ULONG; typedef unsigned long u_long; int main() { ULONG num1; u_long num2; // 使用新的类型名称 num1 = 100; num2 = 200; printf("num1 的值: %lu\n", num1); printf("num2 的值: %lu\n", num2); return 0; } ``` 在上面的示例中,typedef关键字将unsigned long重新命名为ULONG和u_long。在程序中使用新的类型名称编译器会将其解释为已有的数据类型。这样可以提高代码的可读性和可维护性,并且可以使代码更具有可移植性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值