C语言里面的预处理是什么意思?
答案:1 悬赏:0 手机版
解决时间 2021-02-16 20:20
- 提问者网友:心如荒岛囚我终老
- 2021-02-16 06:48
C语言里面的预处理是什么意思?
最佳答案
- 五星知识达人网友:第幾種人
- 2021-02-16 07:02
预处理 功能主要包括:
宏定义,文件包含,条件编译三部分。
分别对应宏定义命令,文件包含命令,条件编译命令 三部分实现。
预处理过程读入源代码,检查包含预处理指令的语句和宏定义,
并对源代码进行响应的转换。预处理过程还会删除程序中的注释
和多余的空白字符。
预处理指令是以#号开头的代码行。
#号必须是该行除了任何空白字符外的第一个字符。
#后是指令关键字,在关键字和#号之间允许存在任意
个数的空白字符。整行语句构成了一条预处理指令,
该指令将在编译器进行编译之前对源代码做某些转换。
指令 用途
# 空指令,无任何效果
#include 包含一个源代码文件
#define 定义宏
#undef 取消已定义的宏
#if 如果给定条件为真,则编译下面代码
#ifdef 如果宏已经定义,则编译下面代码
#ifndef 如果宏没有定义,则编译下面代码
#elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#endif 结束一个#if……#else条件编译块
#error 停止编译并显示错误信息
#else 条件编译的否则选项
#error 指令将使编译器显示一条错误信息,然后停止编译。
#line 指令可以改变编译器用来指出警告和错误信息的文件号和行号。
#pragma 指令没有正式的定义。编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息。
文件包含
在程序中包含头文件有两种格式:
#include
#include "my.h"
第一种方法是用尖括号把头文件括起来。
这种格式告诉预处理程序在编译器自带的或
外部库的头文件中搜索被包含的头文件。
第二种方法是用双引号把头文件括起来。
这种格式告诉预处理程序在当前被编译的
应用程序的源代码文件中搜索被包含的头文件,
如果找不到,再搜索编译器自带的头文件。
采用两种不同包含格式的理由在于,编译器是
安装在公共子目录下的,而被编译的应用程序
是在它们自己的私有子目录下的。一个应用程序
既包含编译器提供的公共头文件,也包含自定义
的私有头文件。采用两种不同的包含格式使得编
译器能够在很多头文件中区别出一组公共的头文件。
举个例子:
#include
#include
#include
#define SIX 6
#define SEVEN 7
#define Cube(x) (x)*(x)*(x)
#define VERSION "tzs"
#define PASTE(n) "最终胜利者是:"#n
#define NUM(a,b,c) a##b##c
#define STR(a,b,c) a##b##c
#define DEBUG 1
int main()
{
int i;
i = SIX + SEVEN;
printf("i = %d
",i);
i = (SIX * SEVEN);
printf("i = %d
",i);
i = Cube(3);
printf("i = %d
",i);
printf("%s",VERSION);
printf("%s",PASTE(桃子));
puts(PASTE(yy/));
puts(PASTE(xx));
printf("%d
",NUM(1,2,3));
//printf("%s
",STR("aa","bb","cc"));
#if DEBUG
printf("Debugging
");
printf("Debugging2222
");
#endif
printf("Running
");
#if defined DEBUG
printf("yes
");
#endif
#if !defined JJ
printf("no JJ
");
#endif
}
宏定义,文件包含,条件编译三部分。
分别对应宏定义命令,文件包含命令,条件编译命令 三部分实现。
预处理过程读入源代码,检查包含预处理指令的语句和宏定义,
并对源代码进行响应的转换。预处理过程还会删除程序中的注释
和多余的空白字符。
预处理指令是以#号开头的代码行。
#号必须是该行除了任何空白字符外的第一个字符。
#后是指令关键字,在关键字和#号之间允许存在任意
个数的空白字符。整行语句构成了一条预处理指令,
该指令将在编译器进行编译之前对源代码做某些转换。
指令 用途
# 空指令,无任何效果
#include 包含一个源代码文件
#define 定义宏
#undef 取消已定义的宏
#if 如果给定条件为真,则编译下面代码
#ifdef 如果宏已经定义,则编译下面代码
#ifndef 如果宏没有定义,则编译下面代码
#elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#endif 结束一个#if……#else条件编译块
#error 停止编译并显示错误信息
#else 条件编译的否则选项
#error 指令将使编译器显示一条错误信息,然后停止编译。
#line 指令可以改变编译器用来指出警告和错误信息的文件号和行号。
#pragma 指令没有正式的定义。编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息。
文件包含
在程序中包含头文件有两种格式:
#include
#include "my.h"
第一种方法是用尖括号把头文件括起来。
这种格式告诉预处理程序在编译器自带的或
外部库的头文件中搜索被包含的头文件。
第二种方法是用双引号把头文件括起来。
这种格式告诉预处理程序在当前被编译的
应用程序的源代码文件中搜索被包含的头文件,
如果找不到,再搜索编译器自带的头文件。
采用两种不同包含格式的理由在于,编译器是
安装在公共子目录下的,而被编译的应用程序
是在它们自己的私有子目录下的。一个应用程序
既包含编译器提供的公共头文件,也包含自定义
的私有头文件。采用两种不同的包含格式使得编
译器能够在很多头文件中区别出一组公共的头文件。
举个例子:
#include
#include
#include
#define SIX 6
#define SEVEN 7
#define Cube(x) (x)*(x)*(x)
#define VERSION "tzs"
#define PASTE(n) "最终胜利者是:"#n
#define NUM(a,b,c) a##b##c
#define STR(a,b,c) a##b##c
#define DEBUG 1
int main()
{
int i;
i = SIX + SEVEN;
printf("i = %d
",i);
i = (SIX * SEVEN);
printf("i = %d
",i);
i = Cube(3);
printf("i = %d
",i);
printf("%s",VERSION);
printf("%s",PASTE(桃子));
puts(PASTE(yy/));
puts(PASTE(xx));
printf("%d
",NUM(1,2,3));
//printf("%s
",STR("aa","bb","cc"));
#if DEBUG
printf("Debugging
");
printf("Debugging2222
");
#endif
printf("Running
");
#if defined DEBUG
printf("yes
");
#endif
#if !defined JJ
printf("no JJ
");
#endif
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯