rt3 发表于 2021-5-29 21:25:12

函数定义

本帖最后由 rt3 于 2021-5-29 21:26 编辑

我发现代码中的第9行用第7-8行代替也能通过编译,那7-8行这种用法是有什么好处嘛?谢谢
#include<stdio.h>
#include <readline/readline.h>
#include <readline/history.h>
#include <stdlib.h>
#include <unistd.h>

int com_cd PARAMS((char *));
int com_cd (arg) char *arg;
//int com_cd(char *arg)
{
        if(chdir(arg)==-1){
        perror(arg);
        return 1;
        }
}

int main(){
        char *path="/home/";
        int a=com_cd(path);
        switch(a){
                case 0:
                        puts("succeed.\n");
                        break;
                default:
                        printf("failed.a==%d\n",a);
                        break;
        }
}

编译命令gcc main.c -g -lreadline -lhistory -o main.run

人造人 发表于 2021-5-29 22:05:40

这是古老的 K&R C 语法
PARAMS 是一个宏,下面是这个宏的定义,在 bash/tilde.h 里面,第 34 行开始

#if !defined (PARAMS)
#if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus)
#    define PARAMS(protos) protos
#else
#    define PARAMS(protos) ()
#endif
#endif


7行的 int com_cd PARAMS((char *));
根据情况会替换成下面的两种
int com_cd (char *);
int com_cd ();

第一种是标准C的写法,如果你当前的编译环境是标准C的话,就会被替换成第一种
第二种是K&R C 的写法,如果你当前的编译环境是K&R C的话,就会被替换成第二种

8 行 int com_cd (arg) char *arg;
这是 K&R C 的写法
页: [1]
查看完整版本: 函数定义