笨方法学C--0
Table of Contents
练习1: 启用编译器
编译使用命令:
make ex1 # 或者 CFLAGS="-Wall" make ex1
第一条命令表示要用make创建名为ex1的文件, 这条命令只适用于.c的文件名与要生成的文件名相同的情况. 如果要创建其他名字的文件, 需要在命令中指定相应的参数.
第二条命令向make命令传递了参数, 表示 cc
编译器在编译时要报告警告. 该命令也可以使用 export CFLAGS="-Wall" 这条命令来代替, 提前设置好环境变量.
练习2: 用Make来代替Python
创建 Makefile
文件, 编辑内容:
CFLAGS=-Wall -g clean: rm -f ex1
-g
: 获取调试信息.
clean
: 告诉make如何清理小项目.
保存Makefile后, 执行:
make clean # 执行clean目标 make ex1 # 编译
附加题
添加目标 all:ex1
, 可以直接使用命令 make
, 而不用 make ex1
.
CFLAGS=-Wall -g all: ex1 clean: rm -f ex1
练习3: 格式化输出
了解占位符和转义符.
练习4: Valgrind介绍
Valgrind可以运行我们的程序, 随后报告所有我们犯下的错误.
安装Valgrind
官网下载Valgrind.
# 校验 确保下载没有出错 md5sum valgrind-3.13.0.tar.bz2 # 解压 tar -xjvf valgrind-3.13.0.tar.bz2 # 进入目录并编译安装 cd valgrind-3.13.0/ ./configure make sudo make install
使用Valgrind
使用方法: valgrind program_name
.
在 ex4.c
中, 我们修改程序, 故意使其崩溃.
#include <stdio.h> int main() { int age = 10; int height; // 未初始化 printf("I am %d years old.\n"); // 缺少参数 printf("I am %d inches tall.\n", height); return 0; }
make ex4 # 像往常一样构建 valgrind ./ex4 # 使用valgrind运行程序
确保 make ex4
构建时, cc
命令带有 -g
选项, 否则Valgrind的输出不会带上行号. 如果没有 -g
选项, 则新建 Makefile
文件, 编辑如下:
CFLAGS=-Wall -g all:ex4 clean: rm -f ex4
如果用Valgrind运行程序时, 出现类似于 by 0x4052112: (bellow main) (libc-start.c:226)
的语句, 则命令要改成:
valgrind --track-origins=yes ./ex4
其中一个错误如下图所示:
解释:
main(ex4.c:7)
(为了方便, 直接在ex3.c的基础上修改了源代码): 表示在 ex3.c
文件的第7行中, 使用了未初始化的值, 占用的空间大小为8, 剩下的几行是栈踪迹.
剩下的错误大同小异, 因为这个未初始化的值还在继续使用.
最后Valgrind会显示一份摘要, 告诉你程序有多烂, 并且会告诉你内存分配情况以及是否有内存泄露. 如下所示:
练习5: 一个C程序的结构
int main(int argc, char *argv[])
: 第一个参数表示命令行参数的数量, 第二个为真正的命令行参数.
printf()
是比较特别的函数, 可以带可变数量的参数.
练习6: 变量类型
- 数组声明:
char name[] = "Pinvon"; printf("%s", name); char initial = 'A'; // 注意, 字符使用单引号; 而字符串使用双引号
- 打印
float
和double
两种类型, 都使用%f
. - 打印8进制, 16进制
int num = 9; printf("%x", num); // 16进制 printf("%o", num); // 8进制 printf("%4x", num); // 16进制输出, 补齐4位的宽度, 不足4位用空格代替 printf("%04x", num); // 16进制输出, 补齐4位的宽度, 不足4位用0代替
- 打印空字符串:
char cNull = '\0'; printf("%c", cNull);
Generated by Emacs 25.x(Org mode 8.x)
Copyright © 2014 - Pinvon - Powered by EGO