| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 951 人关注过本帖
标题:C语言多文件的运行的问题
只看楼主 加入收藏
陆嘉文
Rank: 1
来 自:江西
等 级:新手上路
帖 子:96
专家分:6
注 册:2011-11-10
结帖率:76.92%
收藏
 问题点数:0 回复次数:10 
C语言多文件的运行的问题
谭浩强的函数那一章例题  file1.c 和file2.c
file1.c
程序代码:
#include <stdio.h>
int A;
int main(int argc, char *argv[])
{
    int power(int m);
    int m,c,b=3,k;
    printf("输入A m的数值");
    scanf("%d%d",&A,&m);
    c=A*b;
    k=power(m);
    printf("c的数值是:%d\n",c);
    printf("k的数值是:%d\n",k);
    return 0;
}



file2.c
程序代码:
extern A;
int power(int m){
    int i,y=1;
    for(i=1;i<=m;i++)
        y=y*A;
    return y;
}


每次运行都会抱这样的一个错误
file1.c:(.text+0x54): undefined reference to `power'
老是显示我没有定义power函数,但是书本上也是这么写的啊,
他怎么不会报错啊!

还有我还想问一下。加入一个文件
它只有一个函数,不是main()函数它可以单独编译吗?
搜索更多相关主题的帖子: C语言 
2015-08-03 13:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
四年了,还在原地踏步。老谭的书可以,他用什么、怎么用?你又是用什么、怎么用?别人家男人站着撒尿女人也站着。

授人以渔,不授人以鱼。
2015-08-03 14:13
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
#include <stdio.h>
#include "file2.c"

试一下

DO IT YOURSELF !
2015-08-03 14:14
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:0 
楼主搞清楚了您的源代码为什么要加<stdio.h>头文件,还有为什么会有一个file2.c文件,
file1.c如果调用file2.c要做些什么?另外,如果file2.c里的函数和别文件的函数名一样,
又要用什么机制解决?

Good Luck
2015-08-03 16:33
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:0 
我的妈啊。还在看那坑爹的老谭书?你这样还学得好C语言吗?
我建议你如果想学好C语言。马上把有关谭浩强的书给扔掉。害死你。

file1.c
程序代码:

#include <stdio.h>
int A;
int main(int argc, char *argv[])
{
    int power(int m);
    int m,c,b=3,k;
    printf("输入A m的数值");
    scanf("%d%d",&A,&m);
    c=A*b;
    k=power(m);
    printf("c的数值是:%d\n",c);
    printf("k的数值是:%d\n",k);
    return 0;
}
上面是一个c文件的代码。
然后下面是另一个C文件的代码
file2.c
程序代码:

extern A;
int power(int m){
    int i,y=1;
    for(i=1;i<=m;i++)
        y=y*A;
    return y;
}
好了,我想问你,如果你要把file2.c里的代码在file1.c的代码里调用,那么,是不是要在file1.c里定位和查找到file2.c文件?
所以,现在问题就来了。预编译头文件里没有file2.c文件的定位,file1.c文件里怎么能编译到file2.c文件里的自定义函数?因为定位不到。
问题明白了,楼主要明白#include 的用法。

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2015-08-10 16:36
暴风晕
Rank: 12Rank: 12Rank: 12
来 自:冥界
等 级:火箭侠
威 望:6
帖 子:402
专家分:3107
注 册:2015-8-8
收藏
得分:0 
老谭的不好用,还是用c primer好,或者Think in C
2015-08-10 17:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 5楼 lanke711
不要亂說

授人以渔,不授人以鱼。
2015-08-10 23:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
#include "*.c"
不知是誰從什麼時候傳播開來的?這樣寫的人出去能混到飯吃?抑或是現在的程序猿都這樣寫?

授人以渔,不授人以鱼。
2015-08-10 23:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
C/C++是編譯型語言,源代碼文件是經過編譯鏈接而成可執行文件運行的,不是直接運行源代碼文件,不存在“多文件運行”的問題。除了製作多.dll程序集,通常祗生成一個.exe可執行文件,那是把所有源代碼文件編譯之後(.obj文件)與靜態鏈接庫(.lib)鏈接得來的機器指令集。所謂“編譯”(Compile,編譯器是Compiler),其實是把.c/.cpp翻譯為目標代碼.obj(實際上在此步驟之前還有一道工序,就是預處理過程,是另一個叫於處理器的進程負責的),那是不可執行的,還有一道“鏈接”(Link,連接器是Linker)的工序,將多個.obj和.lib拼合而成.exe或.dll,那才是最終的程序產品。編譯型語言的程序,生成之後是不需要源代碼文件的!

在命令行執行編譯過程,就可以看到反饋信息,它調用了兩個程序,Compiler和Linker,分別有程序名和版本的,留意到這些信息,就知道一條編譯指令到底幹了什麼,再看看編譯幫助(用/?參數列出),也會發現僅編譯和僅鏈接的選項。一個cl或gcc,本身就是一個集成命令,是負責啟動不同進程的ide,屬於命令行ide,本質上與集成了編輯器的文本IDE或圖形IDE是一樣的。在vs(vc其實就是vs)中編譯,也可以在輸出窗口中看到與命令行一樣的信息,那不過是把命令行輸出改向到一個窗口而已,根本不是某些人所推崇的祗在命令行編譯才能學到東西,多留意、多琢磨,什麼都是一樣的。

這些東西,本來是學語言之前就應該瞭解的基礎,教材或老師都應該先講解這些,才可以進入正式學習。我不知道現在的教學都怎麼回事,那些學生好像全不懂似地,總是問一些最基本的問題,就如不知道字是什麼意思卻試圖寫文章、寫詩,就是典型的基礎沒打好。

[ 本帖最后由 TonyDeng 于 2015-8-11 01:07 编辑 ]

授人以渔,不授人以鱼。
2015-08-11 00:54
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:0 
回复 7楼 TonyDeng
好吧。老大,我承认我极端了。谭浩强的书虽然细致,但是太过散。最重要的是谭浩强的书里代码不规范(我模糊的这样说吧,其实他有些地方有不好的写代码的习惯,这些习惯会被一些初学者学去然后变成习惯,想改改不掉。),所以我觉得这样的书不适合初学者学习。相反,有一些基础的话倒是适合,谭浩强的书对指针讲的很详细。
当有些人不是在校学生,而是社会工作者,或者低学历自学者。没有老师指导的时候,很多人在没有导师指导的情况下去从一本书上接触C语言,书就成了老师。
我也是自学而来的。在没有老师的指导下自己学习的。刚刚开始学习的时候,没有任何基础,很多人都说谭浩强的书简单易懂。呃,但是我学了有几个月。后来我又买了一本C语言入门到精通的书,四个月学完了整本书。(其实就是基础学完了。自学是很辛苦的,没有老师又要工作又要腾时间学习。)对比了两本书,反而我觉得后面的书比谭浩强的书更简洁,更让人理解。书上每章每节可以说只有一个举例,但是代码在总结的时候会给出一段完整的代码。代码书写规范。
所以,我个人认为像楼主这样刚接触的初学者不适合看谭浩强的书。学基础,是打牢基础,养成规范写代码的习惯。才能有利于以后进阶学习。

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2015-08-11 11:51
快速回复:C语言多文件的运行的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016762 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved