为了简单起见,请使用这些无用的代码。如果我尝试使用clang编译下面的代码片段,我会得到以下错误消息: argc_test.c:5:14:错误:指针和整数之间的比较('char **'和'int')[-Werror ]如果(!的argc = 4)作为“argv”的拼写错误“argc”导致char **和int之间的比较 - 为什么?
的代码:
#include <stdio.h>
#include <stdlib.h>
int main(int agrc, char *argv[]){
if (argc != 4){
fprintf(stderr, "Incorrect usage.");
}
}
我知道错误是由错字第5行(声明变量“agrc”而不是“的argc”造成什么我想知道为什么这会导致char **和int语句在if语句中的比较?这是否意味着argc是char **,即使我没有声明它?
那没有't t他只有我得到的错误信息,这只是一个突出的。下面是完整的命令行输出:
~/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
只有第一个错误很重要。其他消息是假的,因为编译器做出了一些无效的猜测,试图移动过去的第一个错误 –
当它询问我是否意味着'argv'时,它是如何表达它的假设,我的意思是,对待它,并且遇到错误?类似于谷歌重新解释拼写错误并提供搜索结果,假设你的意思是别的吗? –