2017-05-22 7 views
-5

RHELのDevelopment Toolsスイートで提供されているコンパイラを使用して、RHEL Linux 7.3ワークステーションでstring.hヘッダーファイルを使用するCプログラムをコンパイルしようとしています。 GCCのバージョンは4.8.5です。 string.hファイルは、開発ツールスイートをインストールしたときにシステムによって/usr/include/ディレクトリにインストールされました。プログラムをコンパイルしようとすると、次のエラーが表示されます。CプログラムでString.hファイルを使用する方法

In file included from All.c:15:0: 
/usr/include/string.h:409:14: error: expected identifier or ‘(’ before string constant 
extern char *strerror (int __errnum) __THROW; 

誰かが私に何か問題を説明できますか?または、ヘッダーファイルはC++とのみ互換性がありますか?

問題の原因を突き止めました。 GCCコンパイラフラグが正しく設定されていないため、コンパイラはコンパイルできませんでした。コンパイルしようとしていたコードは、Xmtモチーフライブラリに関連していました。

私は質問が下落した理由を理解しており、今後このサイトのルールに準拠しようとします。皆さん、ありがとうございました !

+1

コードを[mcve]として表示してください。 – kaylum

+0

[MCVE]を同封してください。 – t0mm13b

+1

'string.h'(' #include 'でインクルードされています)について議論しているのか、まったく違う名前の不明な名前である 'String.h'について議論していますか?内容で判断すると、あなたは本当に ''を見ています。しかし、ファイルシステムが大文字と小文字を区別しないプラットフォーム(Windows、macOS)があっても、大文字と小文字の区別はC言語では重要です( '#include 'は '#include 'と同じファイルを使用します'#include 'には他のファイル 'String.h'が含まれていますが、逆の意図もありますがどちらも悪いです)。 –

答えて

1

システムが正しく設定されていません。

extern char strerror(int __errnum)__THROW; 

は、__THROWが何も定義されていない限り、Cでは構文エラーです。それはおそらくされていないでしょう。ヘッダーは、コンパイラーに定義されたさまざまなビットがあることを期待して書かれていますが、コンパイラーを実際に呼び出すときにはそうではありません。

最も簡単な答えは、単にコンパイラを再インストールすることです。これは、Unixライクなシステムでは、コンパイラが深刻になる傾向があることです。あなたはそれを簡単に拭くことができないし、何百もの他のものを傷つけないで再インストールすることはできません。 "Hello world"を試して、問題がすべてのヘッダーファイルか単にstring.hであるかどうか確認してください。

関連する問題