边读边数
从字符串里依次读整数,遇到读不出整数的位置就停。用 sscanf 的 %n 记下每次读了几个字符,输出 和/个数。 (本题用 gcc -std=c11 -O0 编译。)
第一个编译运行的 C 程序
场景:判题机替你编译、替你喂输入。到了真机上,这两件事都得自己来:写源码、敲 gcc、运行产物、用重定向喂数据。 任务:新建 ~/work/stat.c 并编译成 ~/work/stat:从标准输入读整数直到输入结束,输出一行 和/个数/最
把编译警告清干净
场景:一段计算平均值的代码编译时一声不吭,运行却不对,甚至会崩。其实编译器早就看出了问题——只是默认没说出来。 任务:用 -Wall -Wextra 重新编译 ~/work/avg.c,把每条警告背后的问题修好,编译出 ~/work/avg
gcc -E 做了什么
一条 gcc 命令,背后是四个阶段 预处理 编译 汇编 链接 宏在第一格展开,函数在最后一格才对上号 gcc -E main.c 只做【0】这一步,然后把结果打到屏幕上。
nm 里的字母 U
nm main.o 的输出里,一个符号前面标着 U,意思是【0】。
少了括号的宏
宏只是文本替换。SQ(1 + 2) 会展开成 1 + 2 * 1 + 2。补全 SQ2,让 SQ2(1 + 2) 真的算出 9,输出 SQ结果/SQ2结果。 (本题用 gcc -std=c11 -O0 编译。)
宏展开之后的真实值
场景:一个配置值经过两个头文件、好几层宏才最终确定。读源码的人各有各的说法,谁也说服不了谁。 任务:找出 ~/work/pp/main.c 里 int limit = LIMIT; 在预处理之后 limit 的初始值(一个整数)。 可操作范
谁真正定义了这个函数
场景:三个源文件里都写着同一个函数名,但其中两份被一个宏悄悄变成了 static。链接时用到的只能是对外可见的那一份。 任务:在 ~/work/obj 里找出:函数(名字见 ~/题目.txt)对外可见的那一份定义,在哪个 .c 文件里。 可
找不到函数的原因
链接器:拿「只用了」去找「有定义」 主程序目标文件 U 用到的函数 另一个目标文件 T 同名函数 哪里都找不到定义,就是 undefined reference 链接时报 undefined reference to `stat_max&#
头文件里的全局变量
头文件里写了 int count = 0;,被两个 .c 文件包含,链接时会【0】。