81 C语言预处理概述以及文件包含命令
来源:互联网 发布:切削参数计算软件下载 编辑:程序博客网 时间:2024/06/10 15:15
C学习网:链接->C学习网
C训练网:链接->C训练网
前面各章中,已经多次使用过#include
命令。使用库函数之前,应该用#include
引入对应的头文件。这种以#
号开头的命令称为预处理命令。C语言源文件要经过编译、链接才能生成可执行程序:
1) 编译(Compile)会将源文件(.c文件)转换为目标文件。对于VC/VS,目标文件后缀为 .obj;对于GCC,目标文件后缀为 .o。
编译是针对单个源文件的,一次编译操作只能编译一个源文件,如果程序中有多个源文件,就需要多次编译操作。2) 链接(Link)是针对多个文件的,它会将编译生成的多个目标文件以及系统中的库、组件等合并成一个可执行程序。
关于编译和链接的过程、目标文件和可执行文件的结构、.h 文件和 .c 文件的区别,我们将在《C语言模块化开发》专题中讲解。
在实际开发中,有时候在编译之前还需要对源文件进行简单的处理。例如,我们希望自己的程序在Windows和Linux下都能够运行,那么就要在Windows下使用VS编译一遍,然后在Linux下使用GCC编译一遍。但是现在有个问题,程序中要实现的某个功能在VS和GCC下使用的函数不同(假设VS下使用 a(),GCC下使用 b()),VS下的函数在GCC下不能编译通过,GCC下的函数在VS下也不能编译通过,怎么办呢?
这就需要在编译之前先对源文件进行处理:如果检测到是VS,就保留 a() 删除 b();如果检测到是GCC,就保留 b() 删除 a()。
这些在编译之前对源文件进行简单加工的过程,就称为预处理(即预先处理、提前处理)。
预处理主要是处理以
#
开头的命令,例如#include <stdio.h>
等。预处理命令要放在所有函数之外,而且一般都放在源文件的前面。预处理是C语言的一个重要功能,由预处理程序完成。当对一个源文件进行编译时,系统将自动调用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。
编译器会将预处理的结果保存到和源文件同名的
.i
文件中,例如 main.c 的预处理结果在 main.i 中。和.c
一样,.i
也是文本文件,可以用编辑器打开直接查看内容。C语言提供了多种预处理功能,如宏定义、文件包含、条件编译等,合理地使用它们会使编写的程序便于阅读、修改、移植和调试,也有利于模块化程序设计。
#include命令
#include
是文件包含命令,主要用来引入对应的头文件。#include
的处理过程很简单,就是将头文件的内容插入到该命令所在的位置,从而把头文件和当前源文件连接成一个源文件,这与复制粘贴的效果相同。#include有两种使用方式:
#include <stdio.h>#include "myHeader.h"
使用尖括号< >
和双引号" "
的区别在于头文件的搜索路径不同,我们将在《细说C语言头文件的路径》一节中深入探讨,请大家先记住:包含标准库的头文件建议用尖括号,包含自定义的头文件建议用双引号。说明:
- 一个#include命令只能包含一个头文件,多个头文件需要多个#include命令。
- 文件包含允许嵌套,也就是说在一个被包含的文件中又可以包含另一个文件。
阅读全文
0 0
- 81 C语言预处理概述以及文件包含命令
- C语言预处理概述以及文件包含命令
- 文件包含命令以及C语言预处理概述
- C 语言之预处理 ---------文件包含
- C语言-预处理指令3-文件包含
- 【C语言】预处理指令—文件包含
- C语言 预处理指令 3文件包含
- C语言预处理概述
- C语言文件包含命令
- C语言文件包含命令
- 【C语言】17-预处理指令3-文件包含
- 【C语言】17-预处理指令3-文件包含
- 【C语言】17-预处理指令3-文件包含
- 【C语言】15 预处理指令--文件包含
- 【C语言】17-预处理指令3-文件包含
- C语言预处理指令:宏、条件编译、文件包含
- C语言入门教程21-预处理指令3-文件包含
- 【C语言】17-预处理指令3-文件包含
- jhipster入门(一 演示官网项目)
- gradle项目构建
- 内核启动分析之Makefile
- UIKit-ViewBlock
- 用库函数实现文件的复制
- 81 C语言预处理概述以及文件包含命令
- Gradle项目构建工具介绍
- 语言基础模块-购物车作业
- Android---广播(Broadcast)---广播发送的过程分析
- Linux下代码从SVN服务器到web服务器的自动化部署[svn update $WEB --username mrwei --password jiaowomrwei]
- 开发环境搭建
- SpringMVC json数据中文乱码问题
- 百度前端学院_小薇课堂_task3
- 写一个简单的记事本,学习IO流