| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3166 人关注过本帖
标题:有了文件包含的.exe程序屏幕一闪就没了
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:17 
重新做,在新建项目中,建立如下两个文件:

aa.cpp
程序代码:
#include<stdio.h>

int suan(char wei[]);

int main()

 {
   char chuan[20];
   scanf("%s",chuan);
   printf("共有%d个字符\n",suan(chuan));
   return 0;

 }


ab.cpp
程序代码:
int suan(char wei[])

 {
   int i;
   for(i=0;wei[i]!='\0';i++);
   return i;

 }

 


编译项目为exe文件就可以了。编译之后,直接在cmd窗口运行它,不用什么getch()。

[ 本帖最后由 TonyDeng 于 2012-1-8 02:14 编辑 ]

授人以渔,不授人以鱼。
2012-01-08 02:13
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
回复 11楼 TonyDeng
.cpp是源文件的扩展名吧?建立两个源文件确实是这样的,我才学的文件包含,里面可以包含.h扩展名的文件,
我想看看包含了别的类型的文件可不可以,前几天我看到个小程序定个时间然后上面就显示当前时间,当当前时间和定义的时间一样时,
播放在同一个文件夹里的一个.mp3音乐,我想这个就是包含了.mp3格式的程序吧?
2012-01-08 02:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你非要包含.h文件也可以,把aa.cpp中下面的代码写在.h文件,然后用#include替换原来那个。

int suan(char wei[]);


所谓#include,就是把文件全部复制插入到当前位置。你可以看到,.h被#include进来,跟我现在教你写的是一回事。

你后面说的那个,不是包含.mp3文件的(虽然连编进去也可以,视程序作者喜欢),而只是到条件符合时打开指定的文件处理罢了。

授人以渔,不授人以鱼。
2012-01-08 02:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
#include的.h文件只是声明类内容,比如这里的函数原型,函数的实现代码是没有的。ab.cpp文件会另外编译为ab.obj文件然后与aa.obj联合link在一起成exe文件。所以,有人经常说抄tc的头文件过来就可以用,那是不可能的,另外还有实现的.lib库,那个才是真正做事的,但tc的.lib不可能与vc的lib和obj连在一起,血型不配。这里是借题顺便说说这个。

授人以渔,不授人以鱼。
2012-01-08 02:35
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
原来是这样呀,呵呵,也就是说,两个文件的内容通过#include连接到一起了,然后就跟在一个文件效果一样了。

[ 本帖最后由 小赵q1 于 2012-1-8 02:50 编辑 ]
2012-01-08 02:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
把函数原型声明放在.h文件中,只是方便你在多个.cpp文件使用这些函数时不用反复写(如果声明有改动也只改.h中的就可以了,这样保证不会因微小差异造成错误)。函数原型是向编译器宣布程序需要使用某个函数的,这个函数实现的代码,只要存在于项目清单所列的文件中,编译器就能找到它(这就是项目中必须两个.cpp都有的原因)。那些C标准库默认的函数,已经被项目管理器替你写好清单了,一定会有的,你只要负责C库中没有的、自己原创的东西即可。

编译有两个阶段,第一个是把各个.cpp编译为.obj,然后是link过程,把所有.obj、.lib以及固定的C程序启动代码(与操作系统相关的特定代码)全部连接在一起,那个才是.exe文件。exe文件形成后,前面那些东西就全部不需要了,如果有改动代码,这个过程就要重新做一次。

授人以渔,不授人以鱼。
2012-01-08 02:50
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
回复 16楼 TonyDeng
两个文件一定要扩展名一样吗?
为什么我的程序这样写也可以编译成功呢?我的aa.cpp是C++ Source File类型的文件,我的ab.txt是建立的C/C++ Header File类型的文件。
2012-01-08 02:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
控制台程序需要在cmd窗口中运行,如果你执行exe程序时,不是从cmd启动的,那么Windows就自动分配一个cmd窗口给它运行,在程序结束时,自动收回。这就是程序一闪即逝的原因,只要你在cmd窗口中启动程序,就不会被收回,因为这个窗口是早已存在的,Windows不会那么野蛮收回这个——谁开的窗口谁自己关,这是基本守则,Windows遵循的。

[ 本帖最后由 TonyDeng 于 2012-1-8 02:57 编辑 ]

授人以渔,不授人以鱼。
2012-01-08 02:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 17楼 小赵q1
与扩展名无关,这就是#include命令的文件名总是全称的原因,它不管你#include什么文件,总之正式编译之前,先把#include的文件全部抄进来再编译,所以这种带#的叫“预编译指令”,就是在正式编译之前处理的。

授人以渔,不授人以鱼。
2012-01-08 02:57
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
回复 19楼 TonyDeng
这么一说我懂了,呵呵,为这个纠结了好几天呢,原来是这样的过程呀,我听到一句话是:“文件包含”命令为多个源程序文件的组装提供了一种方法。在编写程序时,习惯上将公共的符号常量定义、数据类型定义和extern类型的全局变量说明构成一个源文件,并以“.H”为文件名的后缀。如果其他文件用到这些说明时,只要包含该文件即可,无需再重新说明,减少了工作量。而且这样编程使得各源程序文件中数据结构、符号常量一级全局变量形式统一,便于程序的修改和调试。

我想知道需要包含的那个文件里面的内容该怎么写,举个例子说下吧,呵呵。辛苦了。
2012-01-08 03:08
快速回复:有了文件包含的.exe程序屏幕一闪就没了
数据加载中...
 
   



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

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