[解決済み] gccでcプログラムをコンパイルすると、型の衝突エラーが発生する。
2022-02-17 05:53:35
質問
以下のプログラムをgccでコンパイルしてみました。
0 #include <stdio.h>
1
2 main ()
3
4 {
5 char my_string[] = "hello there";
6
7 my_print (my_string);
8 my_print2 (my_string);
9}
10
11 void my_print (char *string)
12 {
13 printf ("The string is %s\n", string);
14 }
15
16 void my_print2 (char *string)
17 {
18 char *string2;
19 int size, i;
20
21 size = strlen (string);
22 string2 = (char *) malloc (size + 1);
23
24 for (i = 0; i < size; i++)
25 string2[size - i] = string[i];
26
27 string2[size+1] = '\0';
28 printf ("The string printed backward is %s\n", string2);
29 }
しかし、これは失敗し、コンパイラは次のようなエラーログを出力します。
- greeting.c: 11: error:conflicting types for 'my_print'.
- greeting.c: 7: error: 'my_print' の前の暗黙の宣言はここでした。
- greeting.c: 16: error:conflicting types for 'my_print2'.
- greeting.c:8: erroro:previous implicit declaration of 'my_print2' was there.
そして、my_printとmy_print2関数をmain関数の前に移動させると、すべてがうまくいきます。 そこで、なぜこの問題が起こるのか、どなたか説明していただけませんか? ありがとうございます。
解決方法は?
関数を宣言せず、呼び出されて初めて表示される場合、その関数は自動的に
int
を宣言していないことになります。
void my_print (char *);
void my_print2 (char *);
というプロトタイプを持つ関数が存在すると仮定します。
int my_print2 (char *);
と
int my_print2 (char *);
というエラーが発生し、戻り値の型を除いて同じプロトタイプを持つ関数を2つ持つことができません。
conflicting types
.
Brianが提案したように、この2つのメソッドをmainの前に宣言してください。
関連
-
[解決済み】C言語で「関数の型が競合しています」と表示される、なぜ?
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み] C: エラー: ';'トークンの前に ')' があると予想される
-
[解決済み】警告:引数「互換性のないポインタ型から」を渡す[デフォルトで有効]。
-
[解決済み】インクリメントオペランドとして lvalue が必要です。
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み】C言語でpow( )への未定義参照、math.hを含むにもかかわらず【重複】。
-
[解決済み] 8192個の要素にループをかけると、プログラムが遅くなるのはなぜですか?
-
[解決済み] プログラムがクラッシュしたときにスタックトレースを自動的に生成する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】警告。この関数ではXが初期化されていない状態で使用される可能性があります。
-
[解決済み】エラー:イニシャライザー要素がロード時に計算可能でない
-
[解決済み】エラー。非スカラー型への変換を要求された
-
[解決済み】サイズ8の無効な読み取り - Valgrind + C
-
[解決済み】argv[]をint型として取得するには?
-
[解決済み】malloc():メモリ破壊
-
[解決済み】スタックスマッシュを検出しました
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み】C言語のフォーマット文字列でデータ引数が使用されない [重複]。
-
[解決済み] エラー: `itoa` はこのスコープで宣言されていません。