1. ホーム
  2. c

[解決済み】GCC Cコードで静的宣言が非静的宣言に続くことを解決するには?

2022-01-25 23:24:42

質問

同じCファイルを、異なるバージョンのccを搭載した2台のマシンでコンパイルしようとしています。

gcc バージョン 3.2.3 では warning: 'foo' was declared implicitly 'extern' and later 'static'

gcc バージョン 4.1.2 は以下の通りです。 error: static declaration of 'foo' follows non-static declaration

どちらもCFLAGSは同じです。gcc 4.1.2 を gcc 3.2.3 のように動作させたい、つまり、このエラーを単なる警告に変えるようなオプションを見つけたいのです。

解決方法は?

エラーメッセージの内容からすると、むしろソースコードを修正した方が良さそうです。コンパイラは、宣言の違いについて文句を言っています。

void foo(int i);
...
void foo(double d) {
    ...
}

で、これは有効なCコードではないので、コンパイラは文句を言います。

おそらく、あなたの問題は、関数が初めて使われるときに利用可能なプロトタイプがなく、コンパイラが暗黙のうちにスタティックでないプロトタイプを作成することでしょう。もしそうなら、最初に使われる前にどこかにプロトタイプを追加することが解決策になります。