易截截图软件、单文件、免安装、纯绿色、仅160KB

读《C和指针》笔记摘要【5】

2010-04-09
第十四章   预处理器
1、#define 替换
在程序中扩展#define定义符号和宏时,需要涉及几个步骤;
①、在调用宏时,首先对参数进行检查,看看是否包含了任何由#define定义的符号,如果是,它们首先被替换;
②、替换文件随后被插入到程序中原来文件的位置,对于宏,参数名被他们的值替代;
③、最后,再次对结果文本进行扫描,看看它是否包含了由#define定义的符号,如果是,就重复上述处理过程;
2、宏参数和#define定义可以包含其他#define定义的符号,但是宏不可以出现递归;
3、#define PRINT( FORMAT, VALUE )  \
printf( "the value of "#VALUE" is "FORMAT" \n", VALUE )
4、宏与类型无关
5、下面的执行结果:
#define MAX( a, b )     ( (a) > (b) ? (a) : (b) )
z = MAX( x++, y++ );  (其中x = 5;y = 8)
结果:x = 6;y = 10;z = 9;
原因:z = ( (x++) > (y++) ? (x++) : (y++));
6、#undef  (预处理指令,用于移除一个宏定义)
7、条件编译:在编译一个程序时,如果我们可以选择某条语句或某组语句,进行翻译或者被忽略,常常显得很方便。只用于调试程序的语句就是一个明显的例子,他们不应该出现在程序的产品版本中,但是你可能并不像把这些语句从源代码中物理删除,因为需要一些维护性修改时,你可能需要重新调试这个程序,还需要这些语句;
8、条件编译:#if 常量表达式 ——这个由预处理器进行求值
statement
#endif
9、所谓常量表达式,就是说它或者是字面值常量或者是一个#define定义的符号,如果变量在执行期前无法获得他们的值,那么他们如果出现在常量表达式中就是非法的,因为他们的值在编译时是不可预测的;
10、条件编译:
#if 常量表达式
statement
#elif 常量表达式
statement
#else
other statement
#endif
11、判断是否被定义:
①、#if   defined(待判断名)
②、#ifdef    待判断名
③、#if   !defined(待判断名)
④、#ifndef  待判断名
        其中#if的功能更强!!
12、头文件嵌套,标准要求编译器必须至少支持8层的头文件嵌套,一般来说,一到两层也差不多;
13、多重包含在绝大多数情况下出现于大型程序中,它往往需要使用很多头文件,因此要发现这种情况并不容易,要解决这种问题,我


相关文档:

keil C 从零学起 教训1

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num;
void main()
{
 TMOD=0x01;
 TH0=(65536-45872)/256;
 TL0=(65536-45872)%256;
 EA=1;
 ET0=1;
 TR0=1;
 P1=0xFF;
 while(1);
}
void T0_time() interrupt 1
{
  ......

c程序的预处理,编译,连接过程。

自己搜集并且整理,用于参考。
1.完整流程:
C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件
 
 
 
pic from http://edmulroy.portbridge.com/oview.htm
 
2. c的预处理
预编译程序所完成的基本上是对源程序的& ......

C/S 与 B/S 的区别


 C/S 与 B/S 
1.硬件环境不同: 
  C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.
  B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行&n ......

又是3只C。。。= =

1.写出两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。
#include<stdio.h>
int gcd(int,int);
int lcm(int,int);
int gcd(int m,int n)
{
if(m%n==0)
return n;
else
return gcd(n,m%n);
}
int lcm(int m,int n)
{
return m*n/(gc ......

【转】C代码优化方案


1、选择合适的算法和数据结构
选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密切的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分的编译器,使用指针比使用数组生成的代码更短,执行效率更高。
在许多 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号