通过函数冲突类型调用时显示 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)。
如果您有任何问题,请告诉我。
我想创建一个小程序来打印通过命令行传递的参数。如果有选项-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)。
如果您有任何问题,请告诉我。