通过函数冲突类型调用时显示 argv?

Displaying argv when called through a function - conflicting types ?

我想创建一个小程序来打印通过命令行传递的参数。如果有选项-i,它应该向后打印它们。

这是我目前的情况

#include <stdlib.h>
#include <stdio.h>

void usage ();
int option_i(char *);
void display_argv(char *, int);
void display_argv_backwards(char *, int);

int main(int argc,  char * argv[]) {
    if (argc == 1) { usage();};

    int reverse = option_i(argv[1]) ;

    if (reverse) {display_argv_backwards(* argv, argc);} else {display_argv(* argv, argc);}

    return 0 ; }

void usage (){ printf("%s\n", "arg < 1 ?" ); exit(1);}

int option_i(char *mot) { return mot[0] == '-' && mot[1] == 'i' ; }

void display_argv(char argv, int argc){
    int k = 0;
    while(k < argc) {printf("%s\n", argv[k++] );};

}

void display_argv_backwards( char * argv, int argc){printf("%s\n", "backwards");}

但我无法弄清楚如何在我的函数中打印 arg display_argv。我尝试了很多不同的方法,但似乎我对通过函数传递的内容感到困惑。

当前错误:

error: conflicting types for ‘display_argv’
 void display_argv(char  argv, int argc){
      ^
cx11.0.c:6:6: note: previous declaration of ‘display_argv’ was here
 void display_argv(char *, int);
      ^
cx11.0.c: In function ‘display_argv’:
cx11.0.c:24:38: error: subscripted value is neither array nor pointer nor vector
  while(k < argc) {printf("%s\n", argv[k++] );};

感谢您阐明我的问题。

继续我的评论,除此之外,如果您试图强制所有代码块都放在一行中,您将把自己逼疯。继续并正确 space 并缩进您的代码。当然,最小块内容的一行是好的(例如 if (argc == 1) usage();),但对于其余部分,将正文移动到下一行并根据需要使用大括号。

例如,您可以使用类似于以下的内容稍微打开您的代码:

#include <stdio.h>
#include <stdlib.h>

void usage (void);
int option_i (char *);
void display_argv (char **, int);
void display_argv_backwards (char **, int);

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

    if (argc == 1) usage();

    int reverse = option_i (argv[1]) ;

    if (reverse) 
        display_argv_backwards (argv, argc);
    else
        display_argv (argv, argc);

    return 0;
}

void usage (void)
{ 
    printf("%s\n", "arg < 1 ?" );
    exit(1);
}

int option_i (char *mot) 
{ 
    return mot[0] == '-' && mot[1] == 'i'; 
}

void display_argv (char **argv, int argc)
{
    int k = 0;
    while (k < argc)
        printf ("%s\n", argv[k++]);
}

void display_argv_backwards (char **argv, int argc)
{
    printf("%s\n", "backwards");
    while (argc--)
        printf ("%s\n", argv[argc]);
}

例子Use/Output

$ ./bin/argcvdisp
arg < 1 ?

$ ./bin/argcvdisp foo bar baz
./bin/argcvdisp
foo
bar
baz

$ ./bin/argcvdisp -i foo bar baz
backwards
baz
bar
foo
-i
./bin/argcvdisp

当然,大部分格式和缩进都是 风格,在很大程度上,这取决于您和个人选择。但是,对于任何阅读您的代码的人来说,某些 "coding standards" 风格有助于提高代码的可读性和最终的可维护性。此类参考资料之一是 NASA C Style Guide(戈达德航天中心 1994)。

如果您有任何问题,请告诉我。