20100601 c陷阱与指针读书笔记(第四五六章)
这三章主要讲了C语言的链接、库函数、预处理。还是有点晦涩难懂啊。
一个C程序是可以有多个部分组成的,但是编译器每次只能编译一个文件,找出其中的错误。某些C语言实现提供了一个称为lint的程序,可以捕获大量的此类错误。连接器一般是与编译器分离的,编译器是把C程序“翻译”成对连接器有意思的形式,这样连接器就能“读懂”C程序了。
对于同名引起的冲突,我们可以将这些放到一个源文件中,并用static修饰,用于若干函数共享这些数据。还有一个好方法就是每个外部对象只在一个地方声明,这个声明的地方一般就在一个头文件中,需要用到该外部对象的所有模块都应该包括这个头文件。
C语言中默认的函数类型为int。任何函数都应该在第一次被调用之前进行声明或者定义,若不这样,函数的默认类型就为int了。函数声明时,形参除了float,short,char类型的参数,在函数声明中完全可以省略参数的类型说名。
宏定义#define,预处理命令,在编译之前完成,可以简化我们的代码。有时候看上去像个函数,却没有函数的开销。宏提供了对字符的替换功能,却不使用对象。
宏的使用是:#define 宏名 替换内容 其中的空格需要注意。不然会引起错误。在使用宏的时候,如果有对参数的操作,不能重复多次(例如++,——),每一次替换都会使操作重复一次,从而带来错误。确保宏没有错误,应该注意使用括号。
一定要注意的是,宏只是替换!!
相关文档:
关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏:
#define WARN_IF(EXP) \
do{ if (EXP) \
& ......
http://en.wikipedia.org/wiki/C_preprocessor
C preprocessor
from Wikipedia, the free encyclopedia
Jump to:navigation, search
The C preprocessor (cpp) is the preprocessor for the C programming language. In many C implementations, it is a separate program invoked by the compiler as the first part ......
C/C++ Reference
http://www.cppreference.com/
C++ Library Reference
http://www.cplusplus.com/ref/
Standard C++ Library Class Reference at Rogue Wave
http://www.roguewave.com/support/docs/hppdocs/stdref/
Dink ......
void mystery(int n)
{
n += 5;
n /= 10;
printf(" :%s\n","***********" + 10 -n);
}
当一个字符串常量位于一个表达式中时,它的值是一个指针常量。编译器把这些指定字符的一份拷贝存储在内存的某个位置,并存储一个指向第1个字符的指针。但是,当数组名用于表达式中时,他们的值也是一个指针常量 ......
原著:Andrew Koenig - AT&T Bell Laboratories Murray Hill, New Jersey 07094
翻译:lover_P
0 简介
C语言及其典型实现被设计为能被专家们容易地使用。这门语言简洁并附有表达力。但有一些限制可以保护那些浮躁的人。一个浮躁的人可以从这些条款中获得一些帮助。
&nbs ......