聊聊C语言的预编译指令include
int function(int a);
int function(int a)
{
return a;
}
在MyCode.h文件中,我们声明了一个函数function,它带有一个整型的形参,返回值也是一个整型值,并且实现了这个函数。我们再写一个代码文件,叫“MyCode.c”,内容如下:
MyCode.c文件内容:
#include <stdio.h>
#include "MyCode.h"
int main()
{
int a = 1;
int b = 0;
b = function(a);
printf("在main函数中,b的值是%d\n", b);
return 0;
}
在MyCode.c中,我们使用include包含了MyCode.h头文件,并且调用了function函数。在Visual C++ 6.0上编译,结果如下:
在VC编译之前,会有一个预编译的过程,即#include "MyCode.h"这一语句会将MyCode.h中的内容插入到相应的位置,那么预编译之后,MyCode.c如下:
...........
int function(int a);
int function(int a)
{
return a;
}
int main()
{
int a = 1;
int b = 0;
b = function(a);
printf("在main函数中,b的值是%d\n", b);
return 0;
}
预编译完了后,VC会继续编译main函数代码。说到这里,也许你还没看出预编译的用处,别急,我们现在修改下MyCode.c中的main函数体,在调用function时,参数是a+1,如下:
#include <stdio.h>
#include "MyCode.h"
int main()
{
int a = 1;
int b = 0;
b = function(a + 1);
printf("修改了main函数后,b的值是%d\n", b);
return 0;
}
我们再来编译,结果如下:
这次编译中,由于MyCode.h没有做任何修改,而且之前也已经编译过一次,因此,MyCode.h本次不会再次编译。但是main函数中做了修改,因此,main函数部分会再次编译, 这就省去了MyCode.h的编译时间。试想,如果MyCode.h中有很多的函数声明,很多的函数实现,很多的变量、常量定义,很多的宏,MyCode.c中也包含了很多的头文件,那么,只要预编译一次这些头文件,以后不管怎么修改main函数,再次编译时,是不是能够省去很多的时间?这就是预编译的好处。当然,如果头文件也被修改了,那么头文件还是要重新编译的。
说到这里,有人可能发现了,代码中有#include <stdio.h>和#include "MyCode.h",头文件一个用<>包含,一个用“”包含,两者有什么区别呢?
对于使用<> 来包含头文件的方式,编译器会去系统目录中寻找头文件,而这个系统目录的位置,可以由你手动配置,也可以由编译器默认。比如,在VC中的配置方式如下:
这里指明了头文件在“D:\softwares\Microsoft Visual Studio\VC98”位置,这是VC安装时默认指定的。而“D:\CCode\MySQL\mysql-5.6.24-win32\include”是我安装MySql时,我自己配置的。如果编译器在上述目录中都找不到头文件stdio.h的话,就会报错!
聊聊C语言的预编译指令include的更多相关文章
- iOS中的预编译指令的初步探究
目录 文件包含 #include #include_next #import 宏定义 #define #undef 条件编译 #if #else #endif #if define #ifdef #i ...
- c语言中条件编译相关的预编译指令
一. 内容概述 本文主要介绍c语言中条件编译相关的预编译指令,包括#define.#undef.#ifdef.#ifndef.#if.#elif.#else.#endif.defined. 二.条件编 ...
- C语言的预编译,程序员必须懂的知识!【预编译指令】【预编译过程】
由“源代码”到“可执行文件”的过程包括四个步骤:预编译.编译.汇编.链接.所以,首先就应该清楚的首要问题就是:预编译只是对程序的文本起作用,换句话说就是,预编译阶段仅仅对源代码的单词进行变换,而不是对 ...
- C/C++中的预编译指令
工作中遇到的: 一个头文件中的: #pragma warning(disable:4996)#pragma warning(disable:4244)#pragma warning(disable:4 ...
- c/c++中的预编译指令总结
预处理指令提供按条件跳过源文件中的节.报告错误和警告条件,以及描绘源代码的不同区域的能力.使用术语“预处理指令”只是为了与 C 和 C++ 编程语言保持一致.在 C# 中没有单独的预处理步骤:预处理指 ...
- C:预编译指令
预编译 关于编译 参考 关于宏定义 参考 预编译又称为预处理,是做些代码文本的替换工作处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等,就是为编译做的预 ...
- C语言的预编译
由"源代码"到"可执行文件"的过程包括四个步骤:预编译.编译.汇编.链接.所以,首先就应该清楚的首要问题就是:预编译只是对程序的文本起作用,换句话说就是,预编译 ...
- C++ 内置宏定义 与 预编译指令
内置宏和预编译指令, 在代码调试.单元测试.跨平台代码中经常会用到.这里记录一下. 1. 内置宏 (文件名,当前行号,当前日期,当前时间,当前执行方法名) __FILE____LINE____DATE ...
- Docs-.NET-C#-指南-语言参考-预处理器指令:#pragma checksum(C# 参考)
ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#pragma checksum(C# 参考) 1.返回顶部 1. #pragma checksum(C# 参考) 2015/0 ...
随机推荐
- 聊聊浏览器(webkit)资源加载机制
一些准备 在开始这个话题之前,我们有必要简单回顾一下 浏览器(webkit)的网页渲染过程(如果想要详细了解这个过程,可以戳我几年前写的一篇文章.): 我们知道,浏览器在渲染过程中,如遇到节点需要依赖 ...
- Win8MetroC#数字图像处理--2.2图像二值化函数
原文:Win8MetroC#数字图像处理--2.2图像二值化函数 [函数代码] /// <summary> /// Binary process. /// </summary> ...
- 给 Web 开发人员推荐的通用独立 UI 组件(二)
现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高.在推荐完图形库之后,再来推荐一些精品的独立 UI 组件.这些组件可组合在一起,形成美观而交互强大的 Web UI . 给 We ...
- ColorCode是一个在线随机取色工具,可以随机获取十六进制、RGB、HSl等颜色。
ColorCode是一个在线随机取色工具,可以随机获取十六进制.RGB.HSl等颜色. ColorCode 彩蛋爆料直击现场 ColorCode是一个在线随机取色工具,可以随机获取十六进制.RGB.H ...
- springmvc拦截请求
springmvc.xml <!--拦截请求 --> <mvc:interceptors> <mvc:interceptor> <!-- 要拦截的请求类型 / ...
- C语言实现常用排序算法——冒泡排序
原理:比较临近的两个元素,只要不符合顺序就进行交换:要点:1.不要越界:2.遍历一遍以后最大的元素就会到最后,所以下次遍历就不用遍历整个数组 void bubble_sort(int a[],int ...
- python之datetime
一.获取当前日期 >>> from datetime import datetime >>> now=datetime.now() >>> pri ...
- No.595-Big Countries-(LeetCode之Database篇)
数据库表 给出的数据库表如下,表名为World. +-----–+----+----+----–+-----+ | name | continent | area | ...
- 原创-使用pywinauto进行dotnet的winform程序控制(一)
pywinauto自动化控制win32的ui的程序,网上有好多的教程.但是操作dotnet写的winform教程,就少之又少.今天我就来分享我的pywinauto操作dotnet的winform的研究 ...
- 24 margin的用法
margin塌陷问题 当时说到了盒模型,盒模型包含着margin,为什么要在这里说margin呢?因为元素和元素在垂直方向上margin里面有坑. 我们来看一个例子: html结构: <div ...