"这篇文章是关于C语言的常见问题集,由Steve Summit原著,朱群英和孙云翻译。内容涵盖了C语言的声明和初始化、结构、联合和枚举等多个方面的问题,旨在帮助读者理解和解决在编程过程中遇到的问题。"
文章详细解答了C语言中的495个关键问题,涉及了各种基本概念和常见困惑。例如:
1. 在选择整数类型时,应考虑实际需求和平台限制,如存储空间和范围。
2. 在64位系统上,64位类型如`long`和`long long`的设计可能因编译器和平台而异,需要查阅相关文档明确其具体行为。
3. 全局变量和函数的最佳定义和声明方式应遵循清晰、模块化的原则,避免作用域混淆。
4. `extern`在函数声明中用来指示该函数是在其他地方定义的,使得编译器知道其存在。
5. `auto`关键字在C语言中主要用于函数内部声明局部变量,但在现代C++中已不再常用。
6. 结构体可以包含指向自身的指针,但需要正确处理递归定义,避免无限循环。
7. 复杂声明的理解可以通过从右向左读取,确定类型并逐步添加修饰符来实现。
8. 非法重定义通常是由于未正确理解作用域规则或者未包含头文件保护导致的。
9. `main()`函数的标准定义为`int main(void)`或`int main(int argc, char *argv[])`,`void main()`并不符合标准。
10. 未初始化的变量的值是不确定的,不能假设其为零、空指针或浮点零。
11. 字符串字面量不能初始化非静态局部数组,因为内存分配不同。
12. 使用`malloc`分配的内存需要显式初始化,不能直接用字符串字面量初始化。
13. `char a[]="stringliteral"`是字符串字面量的复制,而`char *p="stringliteral"`是指向只读内存的指针,对后者赋值会导致未定义行为。
14. 函数指针的声明和初始化需要匹配函数的返回类型和参数列表。
此外,文章还讨论了结构、联合和枚举的使用,包括结构能否包含指向自身的指针、如何实现抽象数据类型以及C语言是否支持面向对象特性等问题。这些问题解答有助于深化对C语言的理解,解决实际编程中遇到的难题。