QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1409|回复: 5

Gcc编译器下的C语言程序调用函数前不用原型申明吗?

[复制链接]
发表于 2003-11-20 09:13:24 | 显示全部楼层 |阅读模式
以前一直用VC或TC编译C程序,这些天刚开始学linux和linux下的C编程。可是发现GCC对于子函数的调用不用进行原型声明就能编译成功。不知是为什么?
还有一个疑问,我下面给出的那个程序用到了strlen(char * )这个函数,在windows下,这个函数需要“#include <string.h>”,但是我不写这条语句,程序也能编译成功。奇怪!程序段见下:

#include <stdio.h>

main()
{
        char string[] = "Hello world!";
        my_print_backword(string);    //此处直接使用没用经过函数声明的
                                                        //函数,在VC编译环境或TC编译环
                                                        //境下好像会出错,但这儿却编译成功
}

void my_print_backword(char * string)
{
        char * string2;
        int       size, i;
        
        size = strlen(string);       //此处用到了strlen()函数,但不包含
                                               //string.h头文件,却也能编译成功
        string2 = (char *)malloc(size+1);
        
        for(i=0;i<size;i++)
                string2 = string[size- i - 1];
        
        string2 = '\0';
        
        printf("The string printed backword is :%s",string2);
        
}//此函数倒序打印字符串string

如上程序能编译成功,并且执行结果正确。但是我却有开头的那两个疑问,请教各位,谢谢!
发表于 2003-11-20 19:45:03 | 显示全部楼层
写不写都行,不过我习惯写上,否则函数多了浏览函数的时候不方便,呵呵!
回复

使用道具 举报

 楼主| 发表于 2003-11-20 19:48:01 | 显示全部楼层
谢谢。还有strlen()函数,为什么不需要"string.h"也可以编译成功呢?
回复

使用道具 举报

发表于 2003-11-20 23:17:51 | 显示全部楼层
你的错误gcc都自做主张处理了,你应该会看到warning.
strlen,strcpy..有些常见函数gcc会自己调用,您不声明也可以,不过换了别的编译器就不一定了.所以最好还是尽量遵守标准.
回复

使用道具 举报

 楼主| 发表于 2003-11-21 14:32:03 | 显示全部楼层
谢谢两位,呵呵,GCC还蛮强的嘛 :-)
回复

使用道具 举报

发表于 2003-11-22 14:13:32 | 显示全部楼层
但我更偏爱g++,呵呵
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-9 10:44 , Processed in 0.040946 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表