2017-01-21 37 views
1

簡潔にするために、この無駄なコードを取ってください。 argc_test.c:5:14:エラー:ポインタと整数の比較( 'char **'と 'int')[-Werror ]もし(!のargc = 4)"argv"と "argv"が間違っていると、char **とint - なぜ?

コード:。私は、エラーが5行目(代わりに "のargc" の "agrc" 変数を宣言する上でタイプミスによって引き起こされていることを知っている

#include <stdio.h> 

#include <stdlib.h> 

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

何Iなぜ宣言していなくても、argcがchar **であることを意味しますか?

That wasn 't彼は私が得たエラーメッセージだけ、それは目立つものです。ここでは、完全なコマンドライン出力だ:打ち鳴らすエラー

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

そして、あなたは4argvを比較する場合はもちろん、あなたが比較しているに遭遇したとき

~/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 
+1

最初のエラーのみが重要です。他のメッセージは、コンパイラがいくつかの無効な推測を行い、最初のエラーを過ぎて移動しようとするので、偽のメッセージです。 –

+0

「argv」を意味するかどうかを質問すると、その意味を仮定しています。エラーが発生しましたか? Googleがタイプミスを再解釈し、何か他のものを意味すると仮定した場合の検索結果を提供する場合と同様ですか? –

答えて

0

argcargvに自動補正されているようです整数へのポインタ。

この種の自動修正を「修正ヒント」といいます。https://clang.llvm.org/diagnostics.htmlを参照してください。メイン

+0

"自動修正"はありません、名前は任意です。呼び出された関数の引数、この例ではmainが問題であれば実際の定義です – zaph

0

int型(int型agrc、するchar * ARGV [])

ARGCの整数を宣言エラー - あなたはAGRCそれを呼びました。 それは、clang doesntがそれを理解する理由を考えています。

+0

応答ありがとうございます。タイプミス、私は元の投稿でそれを指摘した。私はtypoがどのように整数とchar **の間の比較をもたらしたかを知りたがっています。 –

関連する問題