c++ 编译器 链接器 如何运行 原理是什么

[复制链接]
查看11 | 回复3 | 2008-11-26 06:57:38 | 显示全部楼层 |阅读模式
q.h
//
.....
fun.cpp
#include"q.h"
///
主函数中调用
#include "fun.cpp"
main
{
fun()
}
每个程序均无错误 只是在连接时出错,而且当把fun.cpp 个变量 函数 限定文件作用域 static成功连接 如果 没有static 是全局变量时 链接时有多重定义错误 ,问题是在其他所有的文件中,我都没有重新定义 ,难道编译器会在编译一个文件的时候,会将用到的其他文件的变量函数重新定义一下么 ?这里不明白
另外,既然我用static 把 fun()设为 此文件所有域了, 那为什么在主文件中却能调用呢难道链接后 文件作用域扩大了?
#include "fun.cpp"
这一句使得在编译的时候fun.cpp全文将被复制到主程序文件中,在主文件里面当然能使用了
这是不正确的 只有.h 才是复制。cpp为单独编译 然后连接
即使按你所说: 为什么不见static 和加 static结果都一样才对, 因为都在主文件中, 不加static的话 还是全局的 应该也没有问题才对
请大家继续讨论 链接原理
额 想错了但是还是不理解 依然可以用.h 代替.cpp那为什么 要设计#include .cpp 形式呢 不是画蛇添足么 直接设计一个#include.h 不就可以了么

回复

使用道具 举报

千问 | 2008-11-26 06:57:38 | 显示全部楼层
#include "fun.cpp" 这一句使得在编译的时候fun.cpp将被复制到主程序文件中,在主文件里面当然能使用了,这不是文件作用域的问题。 至于前一个问题,你没给出程序的,我也看不出来。 另外:对楼主的回复: 你对fun.cpp也使用include的话,则fun.cpp中的内容肯定也是要复制过去的,只要你用include。(include这个保留字的含义就是告诉编译器除了读包含include这个语句的文件之外还要读取include语句包含的文件).一般来说,我们在include后面包含的都是xxxx.h这样的头文件,这是因为在头文件里面包含的都是声明而不是定义,在一个工程中声明可以重复多次但是定义(不管它在哪个文件...
回复

使用道具 举报

千问 | 2008-11-26 06:57:38 | 显示全部楼层
楼主对于#include和链接的理解错了,去网上找资料学习一下吧。涉及到的内容多了,很难在这里给你讲清楚。...
回复

使用道具 举报

千问 | 2008-11-26 06:57:38 | 显示全部楼层
这个问题确实很难讲清楚哦.如果你还是一个在校学生的话,这个你需要去图书馆看看有没有相关书籍,你可以去看看....
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行