c语言预处理与typedef

xiaoxiao2025-05-07  47

一、预处理 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

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

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

转载请注明原文地址: https://www.6miu.com/read-5030034.html

最新回复(0)