被rpcgen示例代码弄糊涂了

被rpcgen示例代码弄糊涂了,c,rpc,C,Rpc,我正在阅读Oracle网站上的RPCgen教程,但不理解示例代码: 为什么“int argc;char*argv[]”放在花括号外?但是,当我运行代码时,编译器没有报告任何错误 /* printmsg.c: print a message on the console */ #include <stdio.h> main(argc, argv) int argc; char *argv[]; { char *message; if (argc !

我正在阅读Oracle网站上的RPCgen教程,但不理解示例代码:

为什么“int argc;char*argv[]”放在花括号外?但是,当我运行代码时,编译器没有报告任何错误

/* printmsg.c: print a message on the console */

#include <stdio.h>

main(argc, argv)
    int argc;
    char *argv[];
{
    char *message;

    if (argc != 2) {
fprintf(stderr, "usage: %s <message>\n",
                    argv[0]);
        exit(1);
    }
    message = argv[1];
    if (!printmessage(message)) {
        fprintf(stderr,"%s: couldn't print your
                    message\n",argv[0]);
    exit(1);
    }
    printf("Message Delivered!\n");
    exit(0);
}
 /* Print a message to the console.
 * Return a boolean indicating whether
 * the message was actually printed. */
 printmessage(msg)
    char *msg;
{
    FILE *f;
    f = fopen("/dev/console", "w");
    if (f == (FILE *)NULL) {
        return (0);
    }
    fprintf(f, "%s\n", msg);
    fclose(f);
    return(1);}
/*printmsg.c:在控制台上打印消息*/
#包括
主(argc、argv)
int-argc;
char*argv[];
{
字符*消息;
如果(argc!=2){
fprintf(标准,“用法:%s\n”,
argv[0]);
出口(1);
}
消息=argv[1];
如果(!打印消息(消息)){
fprintf(标准字符,“%s:无法打印您的
消息\n“,argv[0]);
出口(1);
}
printf(“消息传递!\n”);
出口(0);
}
/*将消息打印到控制台。
*返回一个布尔值,指示
*消息实际上是打印出来的*/
打印消息(msg)
char*msg;
{
文件*f;
f=fopen(“/dev/console”,“w”);
如果(f==(文件*)为空){
返回(0);
}
fprintf(f,“%s\n”,msg);
fclose(f);
返回(1);}

这是一种老式的参数列表语法,由K&R C支持


见此。

它相当于
(int-argc,char*argv[])