C 程序员传统上喜欢知道很多(可能比他们需要知道的还要多) 关于机器
实现的细节。
空指针在源码和大多数机器
实现中都用零来表示的事实导致了很多无根据的猜测。
问题:
考虑到有关空指针的所有这些困惑,
难道把要求它们内部表达都必须为0 不是更简单吗?如果没有其它的原因, 这样做会是没脑筋的。
因为它会不必要地限制某些实现, 阻止它们...
一般地说, 使用指针的时候, 你必须总是考虑内存分配, 除非明确知道编译器替你做了此事。
如果一个库函数的文档没有明确提到内存分配, 那么通常需要调用者来考虑。Unix 型的手册...
当你调用free() 的时候, 传入指针指向的内存被释放,
但调用函数的指针值可能保持不变,
因为C的按值传参语义意味着被调函数永远不会永久改变...
在调用alloca() 的函数返回的时候, 它分配的内存会自动释放。
也就是说, 用alloca 分配的内存在某种程度上局部于函数的“堆栈帧&rdquo...
不能。
main() 必须声明为返回int, 且没有参数或者接受适当类型的两个参数。
如果你调用了exit()但还是有警告信息, 你可能需要插入一条冗余的return语句
(...
简单地说:
实现定义意味着实现必须选择某种行为并提供文档。
未明确意味着实现必须选择某种行为但不必提供文档。
未定义意味着任何事情都可能发生。
标准在任何情况下都不强加需求...
某些构造随编译器和硬件的实现而变化, 这一直是C语言的一个特点。
这种有意的不严格规定可以让编译器生成效率更高的代码, 而不必让所有程序为了不合理的情况承担额外的负...
确保你知道经典的正则表达式和文件名通配符的不同。
前者的变体在Unix工具ed 和grep 等中使用, 后者的变体在多数操作系统中使用。
有许多匹配正则表达式的包可以利用。
...
标准C 库函数就有一个: rand()。
你系统上的实现可能并不完美, 但写一个更好的并不是一件容易的事。如果你需要实现自己的随机数生成器, 有许多这方面的文章可供参考; 象下面...