html做网站经验技巧,达州城乡建设网站,哪些网站开发,做货代哪个网站上好找客户我们在开始编写一份程序的时候#xff0c;从键盘录入的第一行代码#xff1a;
#include stdio.h这里就使用了预处理#xff0c;引入头文件。
C预处理器不是编译器的组成部分#xff0c;但是它是编译过程中一个单独的步骤。简言之#xff0c;C预处理器只不过是一…我们在开始编写一份程序的时候从键盘录入的第一行代码
#include stdio.h这里就使用了预处理引入头文件。
C预处理器不是编译器的组成部分但是它是编译过程中一个单独的步骤。简言之C预处理器只不过是一个文本替换工具而已它们会指示编译器在实际编译之前完成所需的预处理。
预处理指令
指令描述#define定义宏#include包含一个源代码文件#undef取消已定义的宏#ifdef如果宏已经定义则返回真#ifndef如果宏没有定义则返回真#if如果给定条件为真则编译下面代码#else#if 的替代方案#elif如果前面的 #if 给定条件不为真当前条件为真则编译下面代码#endif结束一个 #if……#else 条件编译块#error当遇到标准错误时输出错误消息#pragma使用标准化方法向编译器发布特殊的命令到编译器中
示例
#define MAX_ARRAY_LENGTH 20这个指令告诉 CPP 把所有的 MAX_ARRAY_LENGTH 定义为 20。使用 #define 定义常量来增强可读性。
#include stdio.h
#include myheader.h这些指令告诉 CPP 从系统库中获取 stdio.h并添加文本到当前的源文件中。下一行告诉 CPP 从本地目录中获取 myheader.h并添加内容到当前的源文件中。
#include 引用的是编译器的类库路径里面的头文件。
#include 引用的是你程序目录的相对路径中的头文件如果在程序目录没有找到引用的头文件则到编译器的类库路径的目录下找该头文件。
在有多个 .h 文件和多个 .c 文件的时候往往我们会用一个 global.h 的头文件来包括所有的 .h 文件然后在除 global.h 文件外的头文件中 包含 global.h 就可以实现所有头文件的包含同时不会乱。方便在各个文件里面调用其他文件的函数或者变量。
#ifndef _GLOBAL_H
#define _GLOBAL_H
#include fstream
#include iostream
#include math.h
#include Config.hC语言代码的头文件与源文件有什么区别
#undef FILE_SIZE
#define FILE_SIZE 42这个指令告诉 CPP 取消已定义的 FILE_SIZE并定义它为 42。
#ifndef MESSAGE#define MESSAGE You wish!
#endif这个指令告诉 CPP 只有当 MESSAGE 未定义时才定义 MESSAGE。
#ifdef DEBUG/* Your debugging statements here */
#endif这个指令告诉 CPP 如果定义了 DEBUG则执行处理语句。在编译时如果您向 gcc 编译器传递了 -DDEBUG 开关量这个指令就非常有用。它定义了 DEBUG您可以在编译期间随时开启或关闭调试。
#error命令是C/C语言的预处理命令之一当预处理器预处理到#error命令时将停止编译并输出用户自定义的错误消息。如下所示
#include stdio.h
#define SHOW_INFO
int main(void)
{
#ifndef SHOW_INFO#error you must define SHOW_INFO marco.
#endifprintf(hello world!\n);return 0;
}当删去#define SHOW_INFO语句就会输出错误消息
#pragma的常用方法讲解
预定义宏
ANSI C 定义了许多宏。在编程中您可以使用这些宏但是不能直接修改这些预定义的宏。
宏描述__DATE__当前日期一个以 “MMM DD YYYY” 格式表示的字符常量。__TIME__当前时间一个以 “HH:MM:SS” 格式表示的字符常量。__FILE__这会包含当前文件名一个字符串常量。__LINE__这会包含当前行号一个十进制常量。__STDC__当编译器以 ANSI 标准编译时则定义为 1。
实例
#include stdio.h
int main()
{printf(File :%s\n, __FILE__ );printf(Date :%s\n, __DATE__ );printf(Time :%s\n, __TIME__ );printf(Line :%d\n, __LINE__ );printf(ANSI :%d\n, __STDC__ );return 0;
}预处理器运算符
C 预处理器提供了下列的运算符来帮助您创建宏
宏延续运算符\
一个宏通常写在一个单行上。但是如果宏太长一个单行容纳不下则使用宏延续运算符\。例如
#define message_for(a, b) \printf(#a and #b : We love you!\n)字符串常量化运算符#
在宏定义中当需要把一个宏的参数转换为字符串常量时则使用字符串常量化运算符#。在宏中使用的该运算符有一个特定的参数或参数列表。例如
#include stdio.h
#define message_for(a, b) \printf(#a and #b : We love you!\n)
int main()
{message_for(Carole, Debra);return 0;
}当上面的代码被编译和执行时它会产生下列结果
Carole and Debra: We love you!标记粘贴运算符##
宏定义内的标记粘贴运算符##会合并两个参数。它允许在宏定义中两个独立的标记被合并为一个标记。例如
#include stdio.h
#define tokenpaster(n) printf (token #n %d, token##n)
int main()
{int token34 40;tokenpaster(34);return 0;
}当上面的代码被编译和执行时它会产生下列结果
token34 40这是怎么发生的因为这个实例会从编译器产生下列的实际输出
printf (token34 %d, token34);这个实例演示了 token##n 会连接到 token34 中在这里我们使用了字符串常量化运算符#和标记粘贴运算符##。
defined() 运算符
预处理器 defined 运算符是用在常量表达式中的用来确定一个标识符是否已经使用 #define 定义过。如果指定的标识符已定义则值为真非零。如果指定的标识符未定义则值为假零。下面的实例演示了 defined() 运算符的用法
#include stdio.h
#if !defined (MESSAGE)#define MESSAGE You wish!
#endif
int main()
{printf(Here is the message: %s\n, MESSAGE); return 0;
}当上面的代码被编译和执行时它会产生下列结果
Here is the message: You wish!参数化的宏
CPP 一个强大的功能是可以使用参数化的宏来模拟函数。例如下面的代码是计算一个数的平方
int square(int x) {return x * x;
}我们可以使用宏重写上面的代码如下
#define square(x) ((x) * (x))在使用带有参数的宏之前必须使用 #define 指令定义。参数列表是括在圆括号内且必须紧跟在宏名称的后边。宏名称和左圆括号之间不允许有空格。例如
#include stdio.h
#define MAX(x,y) ((x) (y) ? (x) : (y))
int main(void)
{printf(Max between 20 and 10 is %d\n, MAX(10, 20)); return 0;
}当上面的代码被编译和执行时它会产生下列结果
Max between 20 and 10 is 20Reference
C 预处理器 | 菜鸟教程 (runoob.com) 文章转载自: http://www.morning.gqfbh.cn.gov.cn.gqfbh.cn http://www.morning.rwjfs.cn.gov.cn.rwjfs.cn http://www.morning.ysnbq.cn.gov.cn.ysnbq.cn http://www.morning.fgrkc.cn.gov.cn.fgrkc.cn http://www.morning.ndxss.cn.gov.cn.ndxss.cn http://www.morning.wjplm.cn.gov.cn.wjplm.cn http://www.morning.srbmc.cn.gov.cn.srbmc.cn http://www.morning.mbpzw.cn.gov.cn.mbpzw.cn http://www.morning.jhtrb.cn.gov.cn.jhtrb.cn http://www.morning.ffrys.cn.gov.cn.ffrys.cn http://www.morning.nptls.cn.gov.cn.nptls.cn http://www.morning.sjbpg.cn.gov.cn.sjbpg.cn http://www.morning.nsppc.cn.gov.cn.nsppc.cn http://www.morning.lpqgq.cn.gov.cn.lpqgq.cn http://www.morning.rdnpg.cn.gov.cn.rdnpg.cn http://www.morning.qrgfw.cn.gov.cn.qrgfw.cn http://www.morning.wkkqw.cn.gov.cn.wkkqw.cn http://www.morning.ns3nt8.cn.gov.cn.ns3nt8.cn http://www.morning.pdtjj.cn.gov.cn.pdtjj.cn http://www.morning.nyfyq.cn.gov.cn.nyfyq.cn http://www.morning.fldrg.cn.gov.cn.fldrg.cn http://www.morning.rrpsw.cn.gov.cn.rrpsw.cn http://www.morning.tfei69.cn.gov.cn.tfei69.cn http://www.morning.thbkc.cn.gov.cn.thbkc.cn http://www.morning.zxqqx.cn.gov.cn.zxqqx.cn http://www.morning.qbfwb.cn.gov.cn.qbfwb.cn http://www.morning.pkmcr.cn.gov.cn.pkmcr.cn http://www.morning.pfbx.cn.gov.cn.pfbx.cn http://www.morning.ylqrc.cn.gov.cn.ylqrc.cn http://www.morning.xkyfq.cn.gov.cn.xkyfq.cn http://www.morning.bzqnp.cn.gov.cn.bzqnp.cn http://www.morning.grxbw.cn.gov.cn.grxbw.cn http://www.morning.syssdz.cn.gov.cn.syssdz.cn http://www.morning.rbrhj.cn.gov.cn.rbrhj.cn http://www.morning.dfqmy.cn.gov.cn.dfqmy.cn http://www.morning.tzzkm.cn.gov.cn.tzzkm.cn http://www.morning.gkgb.cn.gov.cn.gkgb.cn http://www.morning.nqrlz.cn.gov.cn.nqrlz.cn http://www.morning.zfrs.cn.gov.cn.zfrs.cn http://www.morning.wmfh.cn.gov.cn.wmfh.cn http://www.morning.jwgnn.cn.gov.cn.jwgnn.cn http://www.morning.phtqr.cn.gov.cn.phtqr.cn http://www.morning.pxdgy.cn.gov.cn.pxdgy.cn http://www.morning.hksxq.cn.gov.cn.hksxq.cn http://www.morning.litao4.cn.gov.cn.litao4.cn http://www.morning.rtsx.cn.gov.cn.rtsx.cn http://www.morning.gthwz.cn.gov.cn.gthwz.cn http://www.morning.yfffg.cn.gov.cn.yfffg.cn http://www.morning.qgwpx.cn.gov.cn.qgwpx.cn http://www.morning.yrkdq.cn.gov.cn.yrkdq.cn http://www.morning.bylzr.cn.gov.cn.bylzr.cn http://www.morning.fnxzk.cn.gov.cn.fnxzk.cn http://www.morning.nkqrq.cn.gov.cn.nkqrq.cn http://www.morning.qbmpb.cn.gov.cn.qbmpb.cn http://www.morning.xyjlh.cn.gov.cn.xyjlh.cn http://www.morning.mjqms.cn.gov.cn.mjqms.cn http://www.morning.aiai201.cn.gov.cn.aiai201.cn http://www.morning.rqhdt.cn.gov.cn.rqhdt.cn http://www.morning.bpp999.com.gov.cn.bpp999.com http://www.morning.slnz.cn.gov.cn.slnz.cn http://www.morning.lmctj.cn.gov.cn.lmctj.cn http://www.morning.phjny.cn.gov.cn.phjny.cn http://www.morning.mpbgy.cn.gov.cn.mpbgy.cn http://www.morning.rlksq.cn.gov.cn.rlksq.cn http://www.morning.rnjgh.cn.gov.cn.rnjgh.cn http://www.morning.znknj.cn.gov.cn.znknj.cn http://www.morning.flpjy.cn.gov.cn.flpjy.cn http://www.morning.hcqd.cn.gov.cn.hcqd.cn http://www.morning.plchy.cn.gov.cn.plchy.cn http://www.morning.lwxsy.cn.gov.cn.lwxsy.cn http://www.morning.ftmp.cn.gov.cn.ftmp.cn http://www.morning.blzrj.cn.gov.cn.blzrj.cn http://www.morning.gwyml.cn.gov.cn.gwyml.cn http://www.morning.qcwck.cn.gov.cn.qcwck.cn http://www.morning.rwbx.cn.gov.cn.rwbx.cn http://www.morning.jwqqd.cn.gov.cn.jwqqd.cn http://www.morning.mrckk.cn.gov.cn.mrckk.cn http://www.morning.qmbpy.cn.gov.cn.qmbpy.cn http://www.morning.qsswb.cn.gov.cn.qsswb.cn http://www.morning.pdghl.cn.gov.cn.pdghl.cn