作者ikjhyu (还没想到)
看板CSSE
标题Re: 请问c++ include标头档的问题
时间Sun Jun 26 23:01:37 2005
※ 引述《kaikaii (kai)》之铭言:
: ※ 引述《ikjhyu (还没想到)》之铭言:
: : 最近在试一些c++的东西
: : 发现一个奇怪的东西
: : 如下面程式
: : #include <stdio.h>
: : void main()
: : {
: : printf("abc\n");
: : }
: : 程式要使用printf() 所以必须include stdio.h档
: : 而他会去呼叫printf.c
: : 但是打开 stdio.h档
: : 却到处找不到他有include的叙述
: : 里面都是一些函式原型的宣告
: : 而没有真正的函式内容档
: : 请问有人知道为什麽这样程式可以执行吗?
: 我刚刚看过了stdio.h stdlib.h 里都没有include 其他.h档
: 又看了VRC那个资料夹中 printf.c的实作
: 我想他应该透过某个方法去连结到VRC中的 .c档 (stdio.h只是个介面 ?)
: 因为VRC 这个资料夹的名字不能被变动
: : 而且把stdio.h档的内容贴到
: : 程式里面可以执行再把include叙述拿掉
: : 也可以正常执行...
: #include <x.h> 不就是将x.h里的内容 copy 到目前的程式里
: 所以既然将x.h的内容都copy 到了程式中
: 那将#include<x.h> 去掉 当然还是能执行 (不拿掉当然可以执行)
: 以上是个人拙见 ^^"
本来是觉得
是不是include 了某些档(如stdio.h) 在编译的时候,
linker会自动的知道要去呼叫哪些档案
特别是被include档 (ex:stdio.h)里面定义的
一些原型函式的具体程式档案 (ex: printf.c)
所以就把他改成是把stdio.h的内容贴到程式里面 再把include<stdio.h>叙述拿掉
然後执行看看 结果也可以执行
所以应该不是linker 自己会去找什麽档案来连结
而是在stdio.h里面的一些程式码会告诉linker
该去连结什麽档案
问题是里面的程式码怎麽都看不出有什麽连结的讯息
而且好像没有"include"之类的叙述...
有点怪..
如果一般使用者只写函式原型档(.h) 而没有include 函式具体程式档(.c)
应该是不能执行的吧
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.59.211.123
1F:推 bxxl:linker会去指定的object files跟library 里面找, 59.120.57.250 06/26
2F:→ bxxl:printf属於标准函式库,在library里面 59.120.57.250 06/26
3F:→ bxxl:通常你看不到它的source code. 59.120.57.250 06/26
4F:推 bxxl:还有自己写的程式一般也不会去include .c档, 59.120.57.250 06/26
※ 编辑: ikjhyu 来自: 61.59.211.123 (06/27 01:10)
※ 编辑: ikjhyu 来自: 61.59.211.123 (06/27 20:48)