优秀的编程知识分享平台

网站首页 > 技术文章 正文

5年程序员总结—这些奇奇怪怪的C语言问题,是大神的必修课

nanyue 2024-10-26 11:20:56 技术文章 4 ℃

你有遇到下面这些奇奇怪怪的问题吗,你了解ANSI/ISO 标准 C吗,作为一名有一定功底的程序员这些你应该懂:

11.1 什么是 “ANSI C 标准”?

11.2 我如何得到一份标准的副本?

11.3 我在哪里可以找到标准的更新?

11.4 很多 ANSI 编译器在遇到以下代码时会警告类型不匹配。extern int func(float); int func(x) float x; {

11.5 能否混用旧式的和新型的函数语法?

11.6 为什么声明 extern int f(struct x *p); 报出了一个奇怪的警告信 息 “结构 x 在参数列表中声明”?

11.7 我不明白为什么我不能象这样在初始化和数组维度中使用常量:const int n = 5; int a[n];

11.8 既然不能修改字符串常量, 为什么不把它们定义为字符常量的数 组?

11.9 “const char *p” 和 “char * const p” 有何区别?

11.10 为什么我不能向接受 const char ** 的函数传入 char **?

11.11 怎样正确声明 main()?

11.12 我能否把 main() 定义为 void, 以避免扰人的 “main无返回值” 警 告?

11.13 可 main() 的第三个参数 envp 是怎么回事?

11.14 我觉得把 main() 声明为 void 不会失败, 因为我调用了 exit() 而不 是 return , 况且我的操作系统也忽略了程序的退出/返回状态。

11.15 那么到底会出什么问题?真的有什么系统不支持 void main() 吗?

11.16 我一直用的那本书《熟练傻瓜C语言》总是使用 void main()。

11.17 从 main() 中, exit(status) 和返回同样的 status 真的等价吗?

11.18 我试图用 ANSI “字符串化” 预处理操作符 # 向信息中插入符号 常量的值, 但它字符串化的总是宏的名字而不是它的值。

11.19 警告信息 “warning: macro replacement within a string literal” 是 什么意思?

11.20 在我用 #ifdef 去掉的代码里出现了奇怪的语法错误。

11.21 #pragma 是什么, 有什么用?

11.22 “#pragma once” 是什么意思?我在一些头文件中看到了它。

11.23 a[3] = "abc"; 合法吗?它是什么意思?

11.24 为什么我不能对 void* 指针进行运算?

11.25 memcpy() 和 memmove() 有什么区别?

11.26 malloc(0) 有什么用?返回一个控指针还是指向 0 字节的指针?

11.27 为什么 ANSI 标准规定了外部标示符的长度和大小写限制?

11.28 我的编译对最简单的测试程序报出了一大堆的语法错误。

11.29 为什么有些 ASNI/ISO 标准库函数未定义?我明明使用的就是ANSI 编译器。

11.30 谁有把旧的 C 程序转化为 ANSI C 或相反的工具, 或者自动生成 原型的工具?

11.31 为什么声称兼容 ANSI 的 Frobozz Magic C 编译器不能编译这些 代码?我知道这些代码是 ANSI 的, 因为 gcc 可以编译。

11.32 人们好像有些在意实现定义 (implementation-defin-ed)、未明确(unspecified) 和无定义 (undefined) 行为的区别。它们的区别到底在哪里?

11.33 一个程序的 “合法”, “有效” 或 “符合” 到底是什么意思?

11.34 我很吃惊, ANSI 标准竟然有那么多没有定义的东西。标准的唯一 任务不就是让这些东西标准化吗?

11.35 有人说 i = i++ 的行为是未定义的, 但是我刚在一个兼容 ANSI 的 编译器上测试, 得到了我希望的结果。











最近发表
标签列表