QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 791|回复: 2

一个让我想不通的C语言问题

[复制链接]
发表于 2004-4-18 17:51:57 | 显示全部楼层 |阅读模式
问题可能很傻,高手看了不要笑话。

从我们最早学习Turbo C开始,我们就知道要使用printf函数,就应该在程序开头写上#include "stdio.h"。

但是在stdio.h这个文件里面,只有关于printf函数的声明,而并没有具体的函数内容的定义。

那么,编译器是如何编译printf函数的呢?总要有个定义函数内容的地方吧?我猜想函数被定义在某个编译好了的库函数文件(.lib文件)中,但是程序是如何引用某个库函数文件呢?从程序的什么地方可以看出来吗?

现在,在读很多Windows或者Linux的程序的时候,我也经常遇到这个问题。xxx.h负责声明各种常量、全局变量、类、函数,xxx.c则负责具体定义这些函数内容,这种编程风格很常见。

但是当另一个程序中需要用到xxx中定义的某个函数时,往往只在开头写上#include "xxx.h",而不是#include "xxx.c"。可是xxx.h文件里面并没有所需函数的实现方法啊,那编译器是怎么通过xxx.h找到xxx.c的呢?

这个问题真是让我很困惑,希望有高手给我指点。
发表于 2004-4-18 18:09:07 | 显示全部楼层
1.The implementation is in the library.(as the libc.so for printf);
    You must specify the path of the library when you link your objects.
    The libc is a standard or default library for gcc,don't need you to point out,the linker is  really smart.
2.The compiler actually don't known or don't need to known where is the symbol.It just treat it
as a external symbol.The work of reference is taken by linker when linking.
回复

使用道具 举报

发表于 2004-4-21 01:25:59 | 显示全部楼层
一般在多文件的软件项目中,*.h只是声明各种变量、常量和函数等,而真正的内容应该写在*.c中,一般需要将Makefile写好才行,然后用make就可以自动编译了,一般文件较少时还可以手工写Makefile,但文件数过多时则最多使用autoconf、automake之类的工具。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 13:40 , Processed in 0.066408 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表