c语言预处理命令(上) 您所在的位置:网站首页 c语言中常用的预处理指令有哪几种方式 c语言预处理命令(上)

c语言预处理命令(上)

2023-11-06 19:55| 来源: 网络整理| 查看: 265

c语言预处理命令 预处理命令基本介绍C语言宏定义基本介绍宏定义的形式宏定义注意事项和细节

预处理命令基本介绍

(1)使用库函数之前,应该用 #include 引入对应的头文件。这种以 # 号开头的命令称为预处理命令。 (2)这些在编译之前对源文件进行简单加工的过程,就称为预处理(即预先处理、提前处理)。 (3)预处理主要是处理以 # 开头的命令,例如 #include 等。预处理命令要放在所有函数之外,而且一般都放在源文件的前面。 (4)预处理是C语言的一个重要功能,由预处理程序完成。当对一个源文件进行编译时,系统将自动调用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。 (5)C语言提供了多种预处理功能,如宏定义、文件包含、条件编译等。

案例:开发一个C语言程序,让它暂停5秒以后再输出内容“helllo,云云豆酱!",并且要求跨平台,在 Windows和Linux下都能运行。 提示: (1)Windows平台下的暂停函数的原型是 void Sleep(DWORD dwMilliseconds),参数的单位是“毫秒”,位于头文件。 (2)Linux平台下暂停函数的原型是unsigned int sleep (unsigned int seconds),参数的单位是“秒”,位于头文件。 (3)#if、#elif、#endif就是预处理命令,它们都是在编译之前由预处理程序来执行的。

#include #if _WIN32 #include #elif __linux__ #include #endif int main(){ #if WIN32 //识别 windows平台 Sleep(5000);//毫秒 #elif __linux__ //识别 linux 平台 sleep(5);//秒 #endif puts("hello,云云豆酱!"); // puts 输出 return 0; }

在这里插入图片描述

C语言宏定义基本介绍

#define 叫做宏定义命令,它也是C语言预处理命令的一种。所谓宏定义,就是用一个标识符来表示一个字符 串,如果在后面的代码中出现了该标识符,那么就全部替换成指定的字符串,又称为宏替换。

案例:宏定义N,内容为100,输出N与整数20的和。

#include #define N 100 //宏定义, N 为宏名,100为宏内容 void main(){ int sum = 20 + N;//这里 N 就为 100 printf("%d",sum); }

在这里插入图片描述

宏定义的形式 #define 宏名 字符串

(1)#表示这是一条预处理命令,所有的预处理命令都以#开头。宏名是标识符的一种,命名规则和变量相同。字符串可以是数字、表达式、if语句、函数等。 (2)这里所说的字符串是一般意义上的字符序列,不要和C语言中的字符串等同,它不需要双引号。 (3)程序中反复使用的表达式就可以使用宏定义。

案例:宏定义,宏名M,对应的字符串 (nn+3n)

#include #define M (n*n+3*n) void main(){ int sum,n; scanf("%d",&n); sum = 3 * M + 4 * M + 5 * M; //先将 M 用 (n*n+3*n) 代替,在进行计算 printf("%d",sum); }

在这里插入图片描述

宏定义注意事项和细节

(1)宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的替换。字符串中可以含任何字符,它可以是常数、表达式、if 语句、函数等,预处理程序对它不作任何检查,如有错误,只能在编译已被宏展开后的源程序时发现。 (2)宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起替换。 (3)宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用 #undef 命令。

在这里插入图片描述 (4)代码中的宏名如果被引号包围,那么预处理程序不对其作宏代替。

#include #define OK 100 void main(){ printf("OK!\n"); }

在这里插入图片描述

(5)宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名,在宏展开时由预处理程序层层代换。

#include #define PI 3.14 #define S PI*r*r void main(){ int r = 2; printf("%.2f",S); }

在这里插入图片描述 (6)习惯上宏名用大写字母表示,以便于与变量区别。但也允许用小写字母。 (7)可用宏定义表示数据类型,使书写方便。

#include #define UINT unsigned int void main(){ UINT a,b;//宏替换 unsigned int a,b; }

(8)宏定义表示数据类型和用 typedef 定义数据说明符的区别:宏定义只是简单的字符串替换,由预处理器来处理;而== typedef是在编译阶段由编译器处理==,它并不是简单的字符串替换,而给原有的数据类型起一个新的名字,将它作为一种新的数据类型。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有