LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 958|回复: 4

问一个关于C的十分基础的问题

[复制链接]
发表于 2006-6-8 16:42:17 | 显示全部楼层 |阅读模式
这是一个十分基础的问题,在写代码的过程中,几乎大部分程序都要返回值,那么这俩个语句有什么区别呢?    return 0;和exit(0);    谢谢了!
我的程序里出现这样的问题,下面是我的代码:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <time.h>
#include <string.h>

#define PORTNUM 13000
#define HOSTLEN 256
#define oops(msg) {perror(msg);return 0;}

int main(int ac,char *av[])
{
        struct sockaddr_in saddr;
        struct hostent *hp;
        char hostname[HOSTLEN];
        int sock_id,sock_fd;
        FILE *sock_fp;
        char *ctime();
        time_t thetime;

        sock_id = socket(PF_INET,SOCK_STREAM,0);
        if(sock_id == -1)
                perror("socket");

        bzero((void *)&saddr,sizeof(saddr));
       
        gethostname(hostname,HOSTLEN);
        hp = gethostbyname(hostname);

        bcopy((void *)hp->h_addr,(void *)&saddr.sin_addr,hp->h_length);
        saddr.sin_port = htons(PORTNUM);
        saddr.sin_family = AF_INET;

        if(bind(sock_id,(struct sockaddr *)&saddr,sizeof(saddr)) != 0)
                oops("bind");

        if(listen(sock_id,1) != 0)
                oops("listen");



        while(1){
                sock_fd = accept(sock_id,NULL,NULL);
                printf("Wow!got a call\n");
                if(sock_fd == -1)
                        oops("accept");
               
                sock_fp = fdopen(sock_fd,"w");
                if(sock_fp == NULL)
                        oops("fdopen");
               
                thetime = time(NULL);
               
                fprintf(sock_fp,"The time here is ..");
                fprintf(sock_fp,"%s",ctime(&thetime));
                fclose(sock_fp);
        }
}


在#define oops(msg) {perror(msg);return 0;}这句中如果我用exit就报不匹配的错误。请诸位解释一下。
发表于 2006-6-8 17:11:45 | 显示全部楼层
exit  表示结束当前进程。
return 是从当前函数返回。

单就你的例子来看:
#define oops(msg) {perror(msg);return 0;}

#define oops(msg) {perror(msg); exit(0);}
没有太大区别。都可以用。
回复 支持 反对

使用道具 举报

发表于 2006-6-8 17:31:25 | 显示全部楼层
exit是个函数,main的类型定义成int,那么按照标准就应该有个int的返回值,这样编译器才不会报错……还有出错应该返回非零值才对吧汗……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-9 07:30:50 | 显示全部楼层
上面说的是 这是我不小心的错误  谢谢wq1977的回答
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-9 08:37:27 | 显示全部楼层
现在上面的那个程序又出了点问题, 继续问吧.
我在调试好这个程序之后 运行了一把 结果挺郁闷的  我只能telnet 127.0.0.1 13000才会起作用
我的机器ip是192.168.50.131  但是telnet  192.168.50.131 13000却告诉我 无法连接  请问这又是怎么一回事情呢
我各人觉得好像是hostname的问题,但究竟是怎么回事,如何修改还请解释一下。
回复 支持 反对

使用道具 举报

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

本版积分规则

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