摘要:
我前面关于stack.c和main.c的讨论。 stack.c这个模块封装了top和stack两个变量,导出了push、 pop、 is_empty三个函数接口,已经设计得比较完善了。但是使用这个模块的每个程序文件都要写三个函数声明也是很麻烦的,假设又有一个foo.c也使用这个模块, main.c和 阅读全文
摘要:
在上一节我们把两个程序文件放在一起编译链接,main.c用到的函数push、 pop和is_empty由stack.c提供,其实有一点小问题,我们用-Wall选项编译main.c可以看到: 由于编译器在处理函数调用代码时没有找到函数原型,只好根据函数调用代码做隐式声明,把这三个函数声明为: 为什么编 阅读全文
摘要:
考虑下面几个程序段: 编译时可以一步编译 : 也可以多步编译: 用nm命令查看目标文件的符号表,会发现main.o中有未定义的符号push、 pop、 is_empty、 putchar,前三个符号在stack.o中实现了,链接生成可执行文件main时可以做符号解析,而putchar是libc的库函 阅读全文
摘要:
一层指针的参数 如果函数接口有指针参数,既可以把指针所指向的数据传给函数使用(称为传入参数),也可以由函数填充指针所指的内存空间,传回给调用者使用(称为传出参数)。有些函数的指针参数同时担当了这两种角色,既是传入参数又是传出参数,这称为Value-result参数。 传入参数 void func(c 阅读全文