9、C语言之预处理命令

预处理命令

  基本概念:ANSI C标准规定可以在C源程序中加入一些“预处理命令”,以改进程序设计环境,提高编程效率。

  这些预处理命令是由ANSI C同一规定的,但是它们不是C语言本身的组成部分,不能直接对它们进行编译(因为编译程序不能识别它们)。必须在对程序进行通常的编译之前,先对程序中这些特殊的命令进行“预编译”

  经过预处理后的程序可由编译程序对预处理后的源程序进行通常的编译处理,得到可供执行的目标代码。

  C语言与其他高级语言的一个重要区别是可以使用预处理命令和具有预处理的功能。

  C提供的预处理功能主要有以下三种:

    1、宏定义

    2、文件包含

    3、条件编译

  这些功能分别用宏定义命令、文件包含命令、条件编译命令来实现。为了与一般C语言相区别,这些命令以符号“#”开头。例如:#define  #include

1、宏定义

  不带参数的宏定义

  宏定义一般形式:

    #define 标识符  字符串

    #define PI 3.1415926

  宏定义的作用时在本程序文件中使用指定的标识符PI来代替“3.1415926”这个字符串,在编译预处理时,将程序中在该命令以后出现的所有PI都用“3.1415926”代替。这种方法使用户能以一个简单的名字代替一个长的字符串。

  这个标识符(名字)称为“宏名”

  在预编译时将宏名替换成字符串的过程称为宏展开。#define是宏定义命令

  说明:

    (1)宏名一般习惯用大写字母表示,以便与变量名相区别。但这并非规定,也可用小写字母

    (2)使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量

    (3)宏定义时用宏名代替一个字符串,只做简单置换,不做正确性检查,只有在编译已被宏展开后的源程序时才会被发现语法错误并报错。

    (4)宏定义不是C语句,不必在行末加分号。如果加了分号则会连分号一起进行置换

    (5)#define命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束。通常,#define命令写在文件开头,函数之前,作为文件一部分,在此文件范围内有效。

    (6)可以用#undef命令终止宏定义的作用域

    (7)在进行宏定义时,可以引用已定义的宏名,可以层层置换

    例如:

1 #include<stdio.h>
2 #define R 3.0
3 #define PI 3.1415926
4 #define L 2*PI*R
5 #define S PI*R*R
6 void main()
7 {
8     printf("L = %f \n S = %f",L,S);
9 }

  带参数的宏定义

    作用:不是进行简单的字符串替换,还要进行参数替换

    带参数的宏定义一般形式为:

      #define 宏名(参数表) 字符串

      字符串中包含在括弧中所指定的参数

      如:#define S(a,b) a*b

2、文件包含处理

  功能:一个源文件可以将另一个源文件的内容全部包含进来

  一般形式:#include “文件名”  // 先在当前目录搜索,在搜索标准目录

       #include <文件名>     //直接按标准目录搜索

  处理过程:预编译时,用被包含文件的内容取代该预处理命令,再将“包含”后的文件作为一个源文件单位进行编译,得到目标文件.obj

  被包含文件的内容:

    源文件(*.c)

    头文件(*.h)//宏定义,数据结构定义,函数说明等

  文件包含可嵌套

  预编译后成为一个文件,因此file2.c中的全局静态变量在file1.c中有效,不必在用extern声明

3、条件编译

  概念:所谓“条件编译”,时对部分内容指定编译的条件,使其只在满足一定条件才进行编译

  条件编译命令的几种形式:

  (1)#ifdef 标识符              (2)#ifndef 标识符                      (3)#if 表达式

      程序段1                                  程序段1          程序段1

      #else          #esle             #else

      程序段2          程序段2          程序段2

     #endif          #endif            #endif

原文地址:https://www.cnblogs.com/Long-w/p/8631138.html

时间: 2024-10-06 10:23:31

9、C语言之预处理命令的相关文章

C语言之预处理命令

/**************************************************************************** Title:C之预处理命令 Time:2014年7月26日 **************************************************************************/ 大一时学过,C语言中预处理命令功能分为3种.(宏定义,文件包含和条件编译) 一:宏定义 格    式       #define  

C语言的预处理命令

1.宏替换命令 编译器遇到宏替换命令所定义的标识符时,用其后的字符串替换该标识符.用这种方式定义符号常量.形式如下: #define  标识符 字符串  #define    TRUE     1 //用 TRUE 表示1 #define     FALSE   0 //用 FALSE 表示0 另一用法是作为代换.宏名可取参量数,每次遇到宏名时,与之相连的形式参数由程序中的实际参数代替: #define     MAX(a ,b) ( a >= b ) ? a : b #define MAX(a

C语言第十一回合:预处理命令的集中营

  [学习目标]   1.         宏定义 2.         文件包括"处理 3.         条件编译 预处理命令:能够改进程序设计的环境.提高编程效率. 其功能主要有三种:宏定义.文件包括.文件编译. ANSI标准定义的C语言预处理指令预览表 A: 宏定义 (a)不带參数的宏定义 格式:#define标识符 字符串 如:#define PI 3.1415926 *标识符被称为:宏名 *在预编译时将宏名替换成字符串的过程为:宏展开. *#define 是宏定义命令 //求圆周长

C语言预处理命令详解

一  前言 预处理(或称预编译)是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作.预处理指令指示在程序正式编译前就由编译器进行的操作,可放在程序中任何位置. 预处理是C语言的一个重要功能,它由预处理程序负责完成.当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译. C语言提供多种预处理功能,主要处理#开始的预编译指令,如宏定义(#define).文件包含(#include).条件编译(#ifdef)等.合理使用预处理功能编

C语言预处理命令总结大全

C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性.ANSI标准定义的C语言预处理程序包括下列命令: #define,#error,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#undef,#line,#pragma等.非常明显,所有预处理命令均以符号#开头,下面分别加以介绍. 一 #define 命令#d

C语言中的预处理命令

预处理功能是C语言的重要功能. 问:为什么要预处理,什么是预处理? 答:我们知道高级语言的运行过程是通过编译程序(编译器)把源代码翻译成机器语言,实现运行的.编译程序的工作包含:语法分析.词法分析.代码生成.代码优化等.但是在正式编译之前还有一些工作要做,例如:去掉注释.变换格式之类的.C语言允许在源程序中包含预处理命令,正式编译(词法分析)前,先对这些命令进行"预处理":然后在进行通常的编译处理.预处理命令从语法上讲不是C语言的一部分,但扩展了C语言程序设计的环境,简化程序开发过程:

C08 C语言预处理命令

目录 宏定义 文件包含 条件编译 预处理命令 C语言的预处理:在编译之前进行的处理,不进行编译. C语言的预处理功能有: 宏定义 文件包含 条件编译 预处理命令以符号"#"开头.. 宏定义 不带参数的宏定义 宏定义又称为宏代换.宏替换,简称"宏".格式: #define 标识符 文本 其中的标识符就是符号常量,也称为"宏名". 预处理(预编译)工作也称为宏展开:将宏名替换为文本(这个文本可以是字符串.可以是代码等).例: #define PI 3

程序猿之--C语言细节15(预处理命令细节#error、运算符#和##、__FILE__、__LINE__)

主要内容:预处理命令细节#error.运算符#和##.__FILE__.__LINE__ #include <stdio.h> /* 包含这个头文件,并不是将其所有函数都链接进程序*/ /* ##运算符 */ #define MK_ID(n) i##n /* 表示将两个记号连接 */ int MK_ID(1), MK_ID(2),MK_ID(3); /* 预处理后变成int i1,i2,i3;*/ /* 定义多个type##_max函数,函数返回类型和参数类型用define决定 * 如GENE

预处理命令[#define]说明

宏定义 宏定义是对一些常见的变量.字符串等进行定义,被定义的数据在编译会进行自动替换.有时一些变量或字符串被多次使用,当需要修改时,就需要对源文件中它们出现的地方一一修改,效率比较低,而通过宏定义,只需要对定义进行一次修改,就可以实现批量修改,提高效率,或者有时有些数字或字符需要多次输入,而数字或字符又不是很规律时,输入就会比较繁琐且容易出错.通过宏义将为输入和维护带来便利. 定义的格式 #define 标识符 字符串 其中的“#”表示这是一条预处理命令.凡是以“#”开头的均为预处理命令.“de