C08 C语言预处理命令
目录
- 宏定义
- 文件包含
- 条件编译
预处理命令
C语言的预处理:在编译之前进行的处理,不进行编译。
C语言的预处理功能有:
- 宏定义
- 文件包含
- 条件编译
预处理命令以符号“#”开头。、
宏定义
不带参数的宏定义
宏定义又称为宏代换、宏替换,简称“宏”。
格式:
#define 标识符 文本
其中的标识符就是符号常量,也称为“宏名”。
预处理(预编译)工作也称为宏展开:将宏名替换为文本(这个文本可以是字符串、可以是代码等)。
例:
#define PI 3.1415926
把程序中全部的标识符PI换成3.1415926
说明:
(1)宏名一般用大写。
(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义。
(3)可以用#undef命令终止宏定义的作用域。
(4)宏定义可以嵌套。
带参数的宏
常规带参数的宏
除了一般的字符串替换,还要做参数代换。
格式:
#define 宏名(参数表) 文本
例如:
#define S(a,b) a*b
例如执行:area=S(3,2)。
第一步被换为area=a*b。
第二步被换为area=3*2。
类似于函数调用,有一个形参和实参结合的过程。
宏参数中表达式的问题
(1)实参如果是表达式容易出问题
#define S(r) r*r
例如执行:area=S(a+b)。
第一步换为:area=r*r。
第二步被换为area=a+b*a+b。
编程意图实际为:area=(a+b)*(a+b)。
因此:正确的宏定义是
#define S(r) ((r)*(r))
因此需要注意:
- 宏名和参数的括号间不能有空格。
- 宏替换只作替换,不做计算,不做表达式求解。
- 函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存。
- 宏的形参实参结合不存在类型,也没有类型转换。
- 宏展开使源程序变长,函数调用不会。
- 宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)。
文件包含
作用:一个文件包含另一个文件的内容。
格式:
#include "文件名"
或
#include <文件名>
文件包含注意:
- 编译时以包含处理以后的文件为编译单位,被包含的文件是源文件的一部分。
- 编译以后只得到一个目标文件.obj。
- 被包含的文件又被称为“标题文件”或“头部文件”、“头文件”,并且常用.h作扩展名。
- 修改头文件后所有包含该文件的文件都要重新编译。
头文件的内容除了函数原型和宏定义外,还可定义结构体、全局变量。头文件注意要点:
- 一个#include命令指定一个头文件。
- 文件1包含文件2,文件2用到文件3,则文件3的包含命令#include应放在文件1的头部第一行。
- 包含可以嵌套。
- <文件名>称为标准方式,系统到头文件目录查找文件。
- "文件名"则先在当前目录查找,而后到头文件目录查找。
- 被包含文件中的静态全局变量不用在包含文件中声明。
示例:
使用文件包含,不需要再本文件中使用extern声明被包含进来的全局变量和函数。
条件编译
有些语句希望在条件满足时才编译。
格式一:
#ifdef 标识符
程序段1
#else
程序段2
#endif
或
#ifdef
程序段1
#endif
当标识符已经定义时,程序段1才参加编译。
格式二
#ifndef 标识符
#define 标识1
程序段1
#endif
如果标识符没有被定义,则重定义标识1,且执行程序段1。
格式三
#if 表达式1
程序段1
#elif 表达式2
程序段2
……
#elif 表达式n
程序段n
#else
程序段n+1
#endif
当表达式1成立时,编译程序段1,当不成立时,编译程序段2。
使用条件编译优点:可以使目标程序变小,运行时间变短。
C08 C语言预处理命令的更多相关文章
- 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出
[源码下载] 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 预处理命令 输入 ...
- C 语言入门第八章--C语言预处理命令
例如:#include ,这种以#号开头的命令称为预处理命令. ===C语言宏定义(#define的用法)==== #define 叫做宏定义命令,它也是C语言预处理命令的一种.所谓宏定义,就是用一个 ...
- C语言预处理命令总结大全
C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性.ANS ...
- C语言预处理命令详解
一 前言 预处理(或称预编译)是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作.预处理指令指示在程序正式编译前就由编译器进行的操作,可放在程序中任何位置. 预处理是C语言的一个重要功能 ...
- C语言预处理命令总结大全 :宏定义
C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性.ANS ...
- [转]C语言预处理命令详解
转载:https://www.cnblogs.com/clover-toeic/p/3851102.html 一 前言 预处理(或称预编译)是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的 ...
- (61)C语言预处理命令详解
一 前言 预处理(或称预编译)是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作.预处理指令指示在程序正式编译前就由编译器进行的操作,可放在程序中任何位置. 预处理是C语言的一个重要功能 ...
- C/C++编程笔记:C语言预处理命令是什么?不要以为你直接写#就行!
很多小伙伴在自己写代码的时候,已经多次使用过#include命令.使用库函数之前,应该用#include引入对应的头文件.其实这种以#号开头的命令称为预处理命令. C语言源文件要经过编译.链接才能生成 ...
- C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等)
转自:http://www.kuqin.com/language/20090806/66164.html 预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器.可见预处理过程先于编译器 ...
随机推荐
- java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell
异常 在使用POI读取Excel文件内容时,发生了异常,报错如下: 大概意思是不能从一个数值的列获取一个字符串类型的值,我使用下面的代码来获取单元格的值: //此处省略N行代码 String cell ...
- 【Unity】物理碰撞实验
http://www.cnblogs.com/javawebsoa/archive/2013/05/18/3085818.html 这几天为了准备面试,所以决定对平时学习中的盲点扫盲一下,首先想到的就 ...
- 51nod1112(xjb)
題目鏈接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1112 題意:中文題誒- 思路:對於函數 f(x) = a + ...
- JS数组去重精简版
看了很多人写的好几个去重方法,我在这里精简组合下,适用于已排序与未排序的数组. 废话不多说,上代码. <!DOCTYPE html> <html> <head> & ...
- Spring JdbcTemplate详解及项目中的运用
1.Spring对不同的持久化支持: Spring为各种支持的持久化技术,都提供了简单操作的模板和回调 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core. ...
- datastream解析
在EOS的eosiolib模块中有一个datasteam.hpp文件,它几乎实现了所有类型对字节流的转换,是一个非常强大的工具类,在这里对它的做一个简单的提取,也加强一下自己对它的理解.在下面的工程中 ...
- Jmeter集成Jira提交缺陷
笔者曾在文章<Jmeter排忧解难—生成excel结果文件>聊到了一种提高接口测试效率的方法.今天,咱们接着对“提高接口测试效率”这个话题做更深入的探讨.作为一名接口测试人员,我们是否一直 ...
- redis之五大数据类型
redis之五大数据类型 redis redis的两种链接方式 简单链接 1234 import redisconn = redis.Redis(host='10.0.0.200',port=6379 ...
- Codeforces Round #563 (Div. 2) B. Ehab Is an Odd Person
链接:https://codeforces.com/contest/1174/problem/B 题意: You're given an array aa of length nn. You can ...
- 2017浙江工业大学-校赛决赛 XiaoWei的战斗力
Description XiaoWei沉迷RPG无法自拔,但是他的战斗力只有5,所以他决定氪金提升战斗力.XiaoWei购买了n个福袋.打开1个福袋后,有以下三种情况出现:1.获得屠龙宝刀,概率为p1 ...