网站 栏目添加 文章不显示,国外比较好的设计网站,好一点的网站建设,网站建设类论文格式编译的过程——预处理 引言预处理包含头文件宏定义指令条件编译 编译、链接 引言
C程序编译的过程#xff1a;预处理 - 编译#xff08;优化、汇编#xff09;- 链接 编译和链接的内容可以查阅这篇文章#xff08;点击查看#xff09;
预处理
编译预处理是指程序编译的过程预处理 - 编译优化、汇编- 链接 编译和链接的内容可以查阅这篇文章点击查看
预处理
编译预处理是指对我们写的源代码进行预处理生成临时文件。 预处理指令主要有以下 三种
包含头文件#include宏定义#define定义宏、#undef删除宏条件编译#ifdef、#ifndef
包含头文件
#include包含头文件有两种方式
#include 文件名直接从编译器自带的函数库目录中寻找文件。这种情况用于包含编译器自带的头文件也叫系统文件。#include 文件名先从自定义的目录中寻找文件如果找不到再从编译器自带的函数库目录中寻找。这种情况用于包含程序员自定义的头文件。
#include也包含其它的文件如.h、.cpp或其它的文件。#include包含文件的本质是把需要包含的文件的内容复制进来。
C98标准后的头文件分为C标准库和C标准库
C的标准库老版本的有.h后缀新版本没有.h的后缀增加了字符c的前缀。例如老版本是stdio.h新版本是cstdio新老版本库中的内容是一样的。在程序中不指定std命名空间也能使用库中的内容。C的标准库老版本的有.h后缀新版本没有.h的后缀。例如老版本是iostream.h新版本是iostream老版本已弃用只能用新版本。在程序中必须指定std命名空间才能使用库中的内容。 注意用户自定义的头文件还是用.h为后缀。
宏定义指令
无参数的宏#define 宏名 宏内容有参数的宏#define MAX(x,y) ((x)(y) ? (x) : (y))
编译的时候编译器把程序中的宏名用宏内容替换是为宏展开宏替换。 宏可以只有宏名没有宏内容。 在C中内联函数可代替有参数的宏效果更好。 C中常用的宏
当前源代码文件名__FILE__当前源代码函数名__FUNCTION__当前源代码行号__LINE__编译的日期__DATE__编译的时间__TIME__编译的时间戳__TIMESTAMP__当用C编译程序时宏__cplusplus就会被定义。 可以自行打印一下宏的内容如下
cout __FILE__: __FILE__ endl;
cout __FUNCTION__: __FUNCTION__ endl;
cout __TIMESTAMP__: __TIMESTAMP__ endl;
cout __cplusplus: __cplusplus endl;条件编译
最常用的两种#ifdef、#ifndef
#ifdef 宏名程序段一
#else程序段二
#endif含义如果#ifdef后面的宏名已存在则使用程序段一否则使用程序段二。
#ifndef 宏名程序段一
#else程序段二
#endif含义如果#ifndef后面的宏名不存在则使用程序段一否则使用序段二。 什么是宏名存在什么是不存在 如果用#define定义宏宏名就存在没定义宏宏名就不存在。宏的内容无所谓只要有名字就行。 ifdef、ifndef、else、 endif这些是条件编译语句与条件判断语句不是一回事。 在C中头文件只需要被包含一次就行了。在C/C中在使用预编译指令#include的时候为了防止头文件被重复包含有两种方式。
方式1用#ifndef指令。
#ifndef _CAR_#define _CAR_//代码内容。
#endif方式2#pragma once指令放在文件的开头
#pargma once
#include iostreamusing namespace std:
...#ifndef方式受C/C语言标准的支持不受编译器的任何限制而#pragma once方式有些编译器不支持。 #ifndef可以针对文件中的部分代码而#pragma once只能针对整个文件。 #ifndef更加灵活兼容性好#pragma once操作简单效率高。
编译、链接
点击查看这篇文章 感谢浏览一起学习