質問
Ubuntu Linuxを使用してCでプログラムを作成し、UNIXマシン(またはUNIXボックスと思われるもの)に移植する必要があります。 UbuntuでGCCを使用して正常にコンパイルされますが、UNIXボックスでGCCを使用してコンパイルしようとすると、次のエラーが表示されます。
a.c: In function `goUpDir':
a.c:44: parse error before `char'
a.c:45: `newDir' undeclared (first use in this function)
a.c:45: (Each undeclared identifier is reported only once
a.c:45: for each function it appears in.)
a.c: In function `goIntoDir':
a.c:54: parse error before `char'
a.c:57: `newDir' undeclared (first use in this function)
a.c:57: `oldDir' undeclared (first use in this function)
主な問題は、 char
の前の解析エラーであると思われます(その他は関連しています)
44 char newDir[50] = "";
54 char* oldDir = (char*)get_current_dir_name();
これらは、単純なCスタイルの文字列宣言です。 UNIXで動作させるために含める必要があるヘッダーファイルはありますか?
PS使用しているUNIXのバージョンとgccのバージョンを確認するコマンドは何ですか?これを知ることで、質問をより具体的にすることができます。
ありがとう
解決
純粋なCをコンパイルする場合、関数の開始時に変数を宣言する必要があります。これは、ほとんどの人がC ++コンパイラを使用してCプログラムをコンパイルし、純粋なCコンパイラでは通常利用できないリソースを提供するためです。最も一般的な例は//コメント行です。
他のヒント
コードを移植可能にする場合は、常に-pedanticまたは-pedantic-errorsを使用してください。
これにより、コードが標準に準拠していない場合に警告/エラーが発生します。
私たちはこのテーマに取り組んでいますが。また、おそらくすべての警告をオンにする必要があります。コンパイラが警告する理由はいくつかあります。あるプラットフォームから別のプラットフォームにコードを移動する場合、新しいハードウェア/ OS /コンパイラは現在のハードウェア/ OS /コンパイラと同じように動作しない可能性があるため、これらの警告は潜在的なバグの原因です。
また、正しいGCCフロントエンド実行可能ファイルを使用します。g++は、明示的に指定しない限り、*。cファイルをC ++ファイルのように扱います。したがって、実際のCをコンパイルする場合は、g ++ではなくgccを使用してください。
gcc -pedantic -Wall -Werror * .c
g ++ -pedantic -Wall -Werror * .cpp
特定の問題を解決するために、43行目を表示すると便利な場合があります。エラーには44行目と記載されていますが、次の行の最初の語彙素。
どのようにファイルをコピーしましたか?そこにあるべきではないものを挿入した可能性はありますか?
ところで:コード内のコードタグの使用を修正してください-「ソースを表示」を使用せずに読むことは現在ほとんど不可能です。ブラウザで。
質問の終了について:
uname -a
gcc -v
移植可能なコードを記述しようとすると、次のコンパイラフラグは、次のプラットフォームでコードをコンパイルしようとする限り、前の多くの問題について通知します。
-std=c89 -pedantic -Wall
他のコンパイラではなく、他のプラットフォームのGCCのみをターゲットにする必要がある場合は、次を試してください:
-std=gnu89 -pedantic -Wall
しかし、これにより、古いGCCではサポートされていない新しいGCCでGNU拡張機能が使用できるようになると思います。わからない。
-pedanticがすべての非標準プログラムについて警告することが保証されていればいいのですが、そうではないことに注意してください。まだ見逃していることがいくつかあります。
エラーの詳細なコンテキストを提供する必要があります...少なくとも1行、おそらく44行目と54行目の前の数行。 44(おそらく40行目)から54行目(または、数行後-60行目)で解決できる場合があります。44行目より前の情報が原因で、「 44行目でchar '、54行目でも同じ(おそらく同じ問題)。
情報が不十分です。上記のコードは少なくとも興味深いものであり、 ANSI C89とANSI C99のどちらについて話すかを知ってください。その広い意味で最初の答えは間違っています。
よろしく フリードリヒ
スティーブ、
最初のエラーメッセージには、「 parse error
before
'char'
"」と表示されます。 charの先行するコードは何ですか?関数宣言ですか?ユーザー定義の型やその他の種類が含まれていますか?
このエラーの原因として最も可能性が高いのは、行44のすぐ前でヘッダーファイルで宣言されているタイプまたはマクロを使用していることです...そのヘッダーファイルは、Ubuntuシステムとコンパイルしようとしているもの。
UNIXとは何ですか? AIX、Ultrix、Minix、Xenix?
GCCには"-version"があります。フラグ:
gcc --version
GCCバージョンを表示するには:
gcc --version
関数を表示すると、周囲のコードが見えるようになります。多くの場合、「前に解析エラー」の問題です。エラーを入力します。