| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 438 人关注过本帖
标题:我遇到了VC的一件怪事!
只看楼主 加入收藏
ltf119
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-6-25
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:6 
我遇到了VC的一件怪事!
请先看我的程序源文件:
图片附件: 游客没有浏览图片的权限,请 登录注册

四个文件分别是:
file1.c
程序代码:
#include <stdio.h>
//#include <math.h>


//#include "head.h"


 /*void enter_string(char str[]);

 void delete_string(char str[],char ch);

 void print_string(char str[]);*/
void main()
{  
    /*extern void enter_string(char str[]);
    extern void delete_string(char str[],char ch);
    extern void print_string(char str[]);*/
    char c;
    char str[80];
    enter_string(str);
    scanf("%c",&c);
    delete_string(str,c);
    print_string(str);
    printf("结果是:%d\n",abs(-10));
}

file2.c
程序代码:
#include<stdio.h>
void enter_string(char str[80])   //定义外部函数enter-string
{
    gets(str);                          //读入字符串str
}

file3.c
程序代码:
#include<stdio.h>

void delete_string(char str[],char ch)
{
    int i,j;
    for(i=j=0;str[i]!='\0';i++)
        if(str[i]!=ch)
            str[j++]=str[i];
    str[j]='\0';

}

file4.c
程序代码:
#include<stdio.h>
void print_string(char str[])
{
    printf("%s\n",str);
}
主函数文件是file1.c,大家应该注意了我把自定义函数的声明全部注释掉了,包括包含math.h文件的声明!我点构建后,程序照样运行,切编译成功!
以下是编译后的提示:
程序代码:
Deleting intermediate files and output files for project 'Trial - Win32 Debug'.
--------------------Configuration: Trial - Win32 Debug--------------------
Compiling...
file1.c
d:\学习用\c++\编程思想第一版\trial\file1.c(17) : warning C4013: 'enter_string' undefined; assuming extern returning int
d:\学习用\c++\编程思想第一版\trial\file1.c(19) : warning C4013: 'delete_string' undefined; assuming extern returning int
d:\学习用\c++\编程思想第一版\trial\file1.c(20) : warning C4013: 'print_string' undefined; assuming extern returning int
d:\学习用\c++\编程思想第一版\trial\file1.c(21) : warning C4013: 'abs' undefined; assuming extern returning int
file2.c
file3.c
file4.c
Linking...

Trial.exe - 0 error(s), 0 warning(s)
从语法上来讲这根本是不可能编译成功的,但在我的VC上不但编译成功而且运行也成功了:
图片附件: 游客没有浏览图片的权限,请 登录注册

求各位大侠给个解释啊,难道不声明也可以直接调用其他文件定义的函数(尤其是不声明#include <math.h>也可用其库内部的函数)。
搜索更多相关主题的帖子: void 源文件 
2012-06-13 19:21
邱威
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:136
专家分:351
注 册:2012-3-28
收藏
得分:3 
.............
2012-06-13 19:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
你庆幸VC有那么聪明吧,只是出警告而已。如果你没把其余三个.c文件放在project清单中,就没那么好运了。这得益于你四个文件的扩展名都是.c。

授人以渔,不授人以鱼。
2012-06-13 19:48
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:3 
好像是它都编译了 然后链接到一起 这样就算你没声明它也找到了
2012-06-13 19:54
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
你可以看看他的编译命令是啥
2012-06-13 19:54
ltf119
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-6-25
收藏
得分:0 
求求你们再多给我一点答复,谢谢!
2012-06-14 09:04
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
我觉得说得够明白了 还有啥不明白的?
2012-06-14 09:30
快速回复:我遇到了VC的一件怪事!
数据加载中...
 
   



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

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