首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 一个简单的程序,但不知哪里有问题? [已结贴,结贴人:cnnoah]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnnoah
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-02-29 17:39:23 楼主
    环境:TC2
    写的头文件,放在系统目录/include下,


    想用头文件,实现程序的清晰简化,所以写了个很简单的程序,但编译总提示_maxss未定义。

    完整程序:
    ----maxss.c----
    #include "maxss.h"
    int maxss(int a,int b)
    {
      return (a>b?a:b);
    }


    ----myTest.c----
    #include <stdio.h>
    #include "maxss.h"
    main()
    {
      int x,y,maxx;
      printf("Input x and y:\n");
      scanf("%d,%d",&x,&y);
      maxx = maxss(x,y);
      printf("the max is: %d.",maxx);
    }


    ----maxss.h----
    int maxss(int a, int b);
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • p0303230
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-29 17:43:401楼 得分:0
    我放着班不上

    在这 疯狂的接分 容易嘛我
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • p0303230
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-29 17:45:462楼 得分:5

    呵呵
    不是c++
    你在main只是include了.h文件
    TC只看到声明了
    如果你include . c文件
    保证可以
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • annvily
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-29 17:48:123楼 得分:0
    extern int maxss(int  a,  int  b);
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • shaoze5
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-29 17:50:464楼 得分:5
    去掉这个头文件,不需要----maxss.h----
    在myTest.c---- 中#include  "maxss.c"
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnnoah
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-29 17:51:585楼 得分:0
    谢谢楼上各位。

    p0303230对的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hastings
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-29 17:54:236楼 得分:0
    关注。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • shaoze5
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-29 17:58:177楼 得分:0
    要是不去掉,就会include两次maxss.h,但是如果只是在maxss.c中使用,又没有意义,所以就去掉这个累赘了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qmm161
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-29 18:02:018楼 得分:0
    莫非是文件没有添加到工程里面?
    include .c这种写法,还是不要的好
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnnoah
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-29 18:45:559楼 得分:0
    to qmm161
    需要将文件添加到工程里吗?
    不懂的问
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • IlikeEnglish
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-29 19:05:3110楼 得分:0
    楼主写的代码的文件结构还是比较规范的。.c 与.h文件就应该分开写。lz肯定是没有链接到 maxss.o文件
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • IlikeEnglish
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-29 19:06:5911楼 得分:0
    经过编译器编译后的函数名为 _maxss
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnnoah
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-29 19:17:3512楼 得分:0
    thks IlikeEnglish
    maxss.o是obj文件吗?
    程序已经运行成功了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • berbar
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-29 22:21:1913楼 得分:0
    去掉mass.h,那是一个多余的,你的mass是一个函数,你只要将这个函数加入到主函数里面就行了~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Michael_555
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-02-29 23:16:5014楼 得分:0
    ----maxss.h----
    extern int  maxss(int  a,  int  b);

    多文件编译,你必须创建工程,或者自己编写makefile和config文件
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • alon21
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-01 20:16:4315楼 得分:10
    你现有的文件都不需要再改动,都放到一个文件夹下去,然后
    建立一个工程文件:MYTEST.PRJ 文件内容如下:
    myTest.c
    maxss.c

    tc2中project菜单中,project name写上:MYTEST.PRJ

    以上都注意文件名的大小写,以及文件中内容的大小写。

    tc2中File菜单中的Change dir改变路径为以上文件所放的路径

    然后编译运行。


    另转:
    TC2.0下多文件编译
    1。 tc2.0分块编译
    当程序复杂时源代码会很长,如果把全部代码放在一个源文件里,写程序,修改、加工程序都会很不方便。程序文件很大时,装入编辑会遇到困难;在文件中找位置也不方便;对程序做了一点修改,调试前必须对整个源文件重新编译;如果不慎把已经调试确认的正确部分改了,又会带来新的麻烦。在实践中人们体会到:应当把大软件(程序)的代码分成一些部分,分别放在一组源程序文件中,分别进行开发、编译、调试,然后把它们组合起来,形成整个软件(程序)。C语言本身支持这种开发方式。当我们写的程序较大时,上述问题就会反应出来,因此应当学习“大程序”的开发方法。

      把一个程序分成几个源程序文件,显然这些源文件不是互相独立的。一个源文件里可能使用其他源文件定义的程序对象(外部变量、函数、类型等),这实际上在不同源文件间形成了一种依赖关系。这样,一个源文件里某个程序对象的定义改动时,使用这些定义的源文件也可能要做相应修改。在生成可执行程序时,应该重新编译改动过的源文件,而没改过的源文件就不必编译了。在连接生成可执行程序时,要把所有必要的模块装配在一起。这些管理工作可以由人自己做,但是很麻烦。TURBO
    C集成开发环境的项目管理功能能帮助我们处理这些问题。利用这种功能,开发大程序的工作将更加方便。今天的各种程序开发环境都提供了类似的管理功能。
      用C语言写大程序,应当把源程序分成若干个源文件。其中有:
    (1)一个或几个自定义的头文件,通常用 .h 作为扩展名。头文件里一般放:
        #include预处理命令,引用系统头文件和其他头文件;
        用#define定义的公共常量和宏;
        数据类型定义,结构、联合等的说明;
        函数原型说明,外部变量的extern说明;等等。
    (2)一个或几个程序源文件,通常用 .c 作为扩展名。这些文件中放:
        对自定义头文件的使用(用#include命令);
        源文件内部使用的常量和宏的定义(用#define命令);
        外部变量的定义;
        各函数的定义,包括main函数和其他函数。
    不提倡在一个 .c 文件里用#include命令引入另一个 .c
    文件的做法。这样往往导致不必要的重新编译,在调试程序查错时也容易引起混乱。应该通过头文件里的函数原型说明和外部变量的extern说明,建立起函数、外部变量的定义(在某个源程序文件中)与它们的使用(可能在另一个源程序文件中)之间的联系,这是正确的做法。

      使用TURBO C项目管理功能的方法是:
      首先建立一个“项目文件”。本系统中项目文件用.PRJ作为扩展名。项目文件同样可以用编辑器建立,在这个文件中列出作为本项目组成部分的所有源程序文件的完整名字(包括扩展名),每行列一个,头文件不必列入。源文件的次序没有关系,第一个源文件的名字将被作为最后生成的可执行程序的名字。

      在启动集成开发环境后,首先装入项目文件。用 Project菜单第一个命令完成这个工作。在此之后,编程工作的对象就是这个项目。
      装入和修改源文件的方式不变。在一个源文件初步完成后,可以用Alt-F9或菜单编译命令对它进行编译,做语法检查,生成目标模块。这时还可能产生由于缺少必要外部定义而出现的错误。发现这种问题,应当修改有关头文件。

      在各个源文件的分别初步编译调试后,用F9或菜单的Compile/Make项命令开发环境建立可执行程序。这时程序加工的工作对象是整个项目,如果系统发现某些目标模块不是最新的(源程序修改过),就自动对它们重新编译,最后把目标模块连接起来,生成可执行程序。编译中若发现源文件有错,所有的错误都将列在消息窗口,排错时系统能够对各个文件中的错误自动定位,如果被定位错误所在的文件不是当前文件,系统将自动装入相应的文件,并把亮条和光标放在正确位置。在这个加工过程中,还可能发现模块之间的关联错误,如变量函数的名字使用和定义不一致,方式不正确,变量函数的extern说明与实际定义不一致,等等。在Make过程中,系统利用源程序的时间信息,确定程序模块的前后时间关系,决定哪些模块需要重新编译,最后在连接时装入所有必需的模块

    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved