c语言 预处理 c语言的预处理功能是指优秀
每个人都曾试图在平淡的学习、工作和生活中写一篇文章。写作是培养人的观察、联想、想象、思维和记忆的重要手段。写范文的时候需要注意什么呢?有哪些格式需要注意呢?接下来小编就给大家介绍一下优秀的范文该怎么写,我们一起来看一看吧。
c语言 预处理 c语言的预处理功能是指篇一
c语言实习总结
推荐度:
c语言课程设计个人总结
推荐度:
c语言程序设计实验报告
推荐度:
c语言程序设计课程设计总结
推荐度:
c语言程序设计心得体会
推荐度:
相关推荐
c语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。那么c语言预处理知识都有哪些呢?以下仅供参考!
在编译器编译之前,会首先搜索预处理指令,按照指令完成编译,预处理又分为:文件包含、条件编译、布局控制(杂注)和宏替换。
#include""和#include<>,前者是和该c文件相同目录下的.h,如 #include "os_cfg.h" ,或指明路径的.h,如 #include "softwareucos-iisourceucos_ii.h" ;
后者是编译器系统路径中的.h,一般c语言标准库函数在编译器里集成,如 #include。
只要包含了.h,而.h里有函数声明(或变量、结构体实例),那么不论这个函数(变量、结构体实例)在那个.c文件里定义的,都可以在主c文件中使用。
对于函数,可以按功能分类成各种模块,集合在一起写成一个.c文件,然后作同名的.h给出函数声明,如果模块太多,也可以再用一个.h来包含各模块的.h,ucos-ii中的includes.h就是这样。
对于变量,c模块中的全局变量只对该模块有效,如果想要被其他c文件访问,就得在.h里声明,如果主c包含了这个.h,那么此变量就成了真正全局的了。
对于结构体实例,其结构的定义可以放在.h里,(如果不需要到处定义很多实例放在c里也可以),实例定义在c里,而声明放在.h里,这样就到处可用此实例了。
#include 的对象直接插入到了该位置,所以可能出现#include重复甚至嵌套,用#ifndef...#define...代码...#endif的方法可以保证重复包含的.h那个只在第一次出现时编译.
上面的#ifndef就是条件编译的一种。条件编译主要用于跳过某些代码不编译,这样可以用来写一个c文件,但是适应不同硬件版本,或者可采用不同算法。我就经常用多种算法写同一个功能,#define method 1,#if methof==1...#endif, #if method ==2...#endif
protothread的神奇功能就是用宏和条件编译来实现的。举个例子:
#define lc_init(s) s = 0;
#define lc_resume(s) switch(s) { case 0:
#define lc_set(s) s = __line__; case __line__:
#define lc_end(s) }
#define pt_begin(pt) { char pt_yield_flag = 1; lc_resume((pt)->lc)
每个线程执行一次 pt_begin(pt),这样就创建了一个switch,一开始 pt->lc=0, pt_begin(pt)之后继续执行语句(本protothread的语句,一般是while(1)),执行到pt_wait_until(pt, condition)之类会调用lc_set((pt)->lc);然后return,于是pt->lc记录了行号,创建了case:,下次进到线程之直接走 lc_resume(s)里的switch到上次的位置
主要是#pragma,从实用的.角度讲,就是编译器为了简化用户操作,给用户提供了一些命令,不同编译器是不一样的,比如,iar ew430就可以直接定义中断函数而不用管中断向量表在哪儿。(比如arm7就要编译前手动改程序段的中断向量表,dspf2812就要用程序指令改数据段的中断向量表,而51则由keil自动放置中断跳转指令。)
#pragma vector=port1_vector
__interrupt void port_1(void)
{
//code
}
编译器会自动给中断函数指定中断向量。
宏函数其实可以巧妙的代替函数,尤其是很短又没有局部变量的一些语句,还可以代换很多复杂的格式,如
#define f "%6.2f"
#define f3 f " " f " " f" "
用函数printf(f3,a,b,c),可以同时指定a,b,c 的格式
为了处理一些有用的信息,预处理定义了一些预处理标识符,虽然各种编译器的预处理标识符不尽相同,但是他们都会处理下面的4种:
__file__ 正在编译的文件的名字
__line__ 正在编译的文件的行号
__date__ 编译时刻的日期字符串,例如: "25 dec 2000"
__time__ 编译时刻的时间字符串,例如: "12:30:55"
s("content_relate");【c语言预处理知识】相关文章:
c语言预处理的相关知识
09-28
c语言编译预处理10-06
有趣的c语言预处理10-04
c语言的预处理代码09-28
c语言预处理概述以及文件包含命令10-06
c语言中的三种预处理功能09-26
c语言入门必备知识09-25
c语言进制知识总结09-24
c语言基础小知识09-22
c语言的预处理09-23