繁体   English   中英

将“argc”拼写为“argv”导致char **和int之间的比较 - 为什么?

[英]Misspelling “argc” as “argv” results in a comparison between a char ** and an int - why?

为简单起见,请使用这些无用的代码。 如果我尝试使用clang编译下面的代码片段,我会收到以下错误消息:argc_test.c:5:14:错误:指针和整数之间的比较('char **'和'int')[ - 错误] if(argc!= 4)

编码:

#include <stdio.h>

#include <stdlib.h>

int main(int agrc, char *argv[]){
    if (argc != 4){
        fprintf(stderr, "Incorrect usage."); 
    }
}

我知道错误是由第5行的错误引起的(声明变量“agrc”而不是“argc”。我想知道的是为什么这会导致char **和int中的int的比较声明?这是否意味着argc是一个char **,即使我没有声明它?

这不是我得到的唯一错误信息,它只是突出的那个。 这是完整的命令行输出:

~/workspace/week_4/pset_4/resize/ $ make argc_test

clang -fsanitize=integer -fsanitize=undefined -ggdb3 -O0 -std=c11 -Wall -Werror -Wextra -Wno-sign-compare -Wshadow    argc_test.c  -lcrypt -lcs50 -lm -o argc_test

argc_test.c:5:9: error: use of undeclared identifier 'argc'; did you mean 'argv'?
    if (argc != 4){
        ^~~~
        argv
argc_test.c:4:26: note: 'argv' declared here
int main(int agrc, char *argv[]){
                         ^
argc_test.c:5:14: error: comparison between pointer and integer ('char **' and 'int') [-Werror]
    if (argc != 4){
        ~~~~ ^  ~
argc_test.c:4:14: error: unused parameter 'agrc' [-Werror,-Wunused-parameter]
int main(int agrc, char *argv[]){
             ^
3 errors generated.
make: *** [argc_test] Error 1

当clang遇到错误时,似乎argc会自动更正为argv

argc_test.c:5:9: error: use of undeclared identifier 'argc'; did you mean 'argv'?

当然,如果将argv4进行比较,则表示您正在将指针与整数进行比较。

这种自动更正称为“fix-it hints”,请参阅https://clang.llvm.org/diagnostics.html

int main(int agrc,char * argv [])

声明ARGC整数的错误 - 您将其称为AGRC。 我想这就是为什么clang不理解它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM