预处理命令

基本概念: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

2 #define R 3.0

3 #define PI 3.1415926

4 #define L 2*PI*R

5 #define S PI*R*R

6 voidmain()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

c语言提供了三种预处理命令,9、C语言之预处理命令相关推荐

  1. c语言提供了三种预处理命令,C语言提供的三种预处理命令

    C语言的三种预处理包括:宏定义(#define).文件包含(#include).条件编译(#if.#else.#endif). 1,不带参数的宏定义: #define 标示符 字符串 在预编译时将宏名 ...

  2. C语言程序设计有哪几种结构,第章c语言程序设计的三种基本结构.ppt

    第章c语言程序设计的三种基本结构 北京科技大学 计算机系 第2章 C语言程序设计 的三种基本结构 2.1 顺序结构程序设计 2.1.1 C语句 2.1.2 字符数据的输入与输出 2.1.3 格式输入与 ...

  3. python选择语句是什么语句_Python语言中的三种选择语句

    本文将详细介绍Python语言中的三种选择语句:if语句,if/else语句和if/elif/else语句.对于每种语句,我们都提供了相应的流程图.与此同时,我们给出许多简单的示例程序,以帮助读者加深 ...

  4. c 语言程序的三种基本结构,C 语言程序的三种基本结构是____ A、顺序结构,选择结构,循环结构 B、递归结构,循环结构,转移结构...

    C 语言程序的三种基本结构是____ A.顺序结构,选择结构,循环结构 B.递归结构,循环结构,转移结构 更多相关问题 [填空题]移动电商,全称 ,是以 为载体的电商模式. [单选题]有关离子选择性电 ...

  5. Python语言学习:三种随机函数random.seed()、numpy.random.seed()、set_random_seed()及random_normal的简介、使用方法(固定种子)详细攻略

    Python语言学习:三种随机函数random.seed().numpy.random.seed().set_random_seed()及random_normal的简介.使用方法(固定种子)之详细攻 ...

  6. Scala 语言输出的三种方式

    Scala 语言输出的三种方式 字符串通过+号连接(类似 java). printf 用法 (类似 C 语言)字符串通过 % 传值. 字符串通过$引用(类似 PHP).

  7. c语言编程非线性方程求解,c语言计算机编程三种方法求解非线性方程

    c语言计算机编程三种方法求解非线性方程 本 科 专 业 学 年 论 文题 目:非线性方程求解比较姓 名: 何 娟 专 业: 计算机科学技术系 班 级: 08 级本科(2)班 指 导 老 师: 刘 晓 ...

  8. 计算机内部组件三种电压,电源通常向计算机内部的各种组件提供哪三种电压

    此资源收集于兔客源码网www.tukebbs.com 电源通常向计算机内部的各种组件提供的三种电压:1.5V,主要供给主板:2.3.3V,主要为CPU供电:3.正负12V,主要为音频电路,硬盘供电.计 ...

  9. c语言编程非线性方程求解,c语言计算机编程三种方法求解非线性方程.doc

    c语言计算机编程三种方法求解非线性方程.doc 本 科 专 业 学 年 论 文题 目非线性方程求解比较姓 名 何 娟 专 业 计算机科学技术系 班 级 08 级本科(2)班 指 导 老 师 刘 晓 娜 ...

最新文章

  1. webmagic 获取文本_WebMagic Selectable抽取元素
  2. 用JTAG将mcs文件烧写到flash中
  3. GNS3路由器直连端口Ping不通
  4. python多维数据post给php_使用Python中的POST将数据发送到PHP
  5. 前端学习(1648):前端系列实战课程之任务功能清单思路
  6. ElasticSearch配置详解
  7. 【Kafka】Consumer group 'console-consumer-28367' has no active members.
  8. ip代理服务器软件25探索云速捷_使用代理进行Web网页抓取的基础
  9. MYSQL数据库表操作pdf
  10. 前端 express使用教程
  11. Android 声音采集回声与回声消除
  12. android图片背景颜色透明度,android:设置背景图片、背景颜色透明
  13. 296 最佳的碰头地点
  14. 批量生成条形码并写入到excel文件
  15. guacamole开发者文档——数据库认证
  16. 使用Kubeadm快速部署K8S集群
  17. 服务器如何从安全模式增加用户名,win10安全模式里怎么添加账户_win10 安全模式如何添加用户-win7之家...
  18. 树莓派的系统安装(简单易入手教程!!!)
  19. R语言package安装显示(as ‘lib’ is unspecified)并出现未知路径
  20. kubelet源码分析(一)之 NewKubeletCommand

热门文章

  1. 新版白话空间统计(12):P值的表达以及空间统计上的特性
  2. tlp导致linux运行缓慢,Ubuntu 18.04安装tlp实现电源管理,解决风扇狂转问题
  3. 前端框架MVC和MVVM的理解
  4. The application of backtracking
  5. FleaPHP 学习笔记2
  6. 【SendSms】短信服务java.lang.NoSuchMethodError: com.google.gson.JsonParser.parseString(Ljava/lang/String;)
  7. Freemarker源码分析(9)core.JSONParser类
  8. android电视自动关机,android实现自动关机的具体方法代码
  9. TcaplusDB君 · 行业新闻汇编(11月08号)
  10. 88 Three.js 导入FBX格式骨骼绑定模型