我遇到了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>也可用其库内部的函数)。