2012-08-04 63 views
6

私はこのC++コードをコンパイルしようとしています:C++ - エラーC2144構文エラー: 'int'の前に ';'を付ける必要があります。

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include "general_configuration.h" 
#include "helper_functions.h" 

#define LINE_LEN 80 

// file_with_as_ext returns 1 if the input has .as extension 
int file_with_as_ext(char* input) 
{ 
    char* dot_value = strchr(input, '.'); 
    if (dot_value == NULL) 
    return 0; 
    else 
    { 
    if (strcmp(dot_value,".as") == 0) 
     return 1; 
    } 
} 

をしかし、私はエラーに"C2144: syntax error : 'int' should be preceded by ';'" を取得していると私は理由を理解することができない、の#defineは必要ありません「;」最後に。

+9

「helper_functions.h」の中にセミコロンで終わらなければならないものがありますが、そうではないように聞こえます。 –

+0

これは必ずしも定義のためである必要はありませんが、ヘッダーファイル内の何か、構造体、クラスなどのために正しく閉じられなかった可能性もあります。これらのカスタムヘッダーも確認してください。見つからない場合は、そのコンテンツを投稿してください。 – ATaylor

+1

ヘッダーを修正した後、 '#define' *をC++の定数定義に置き換え、生の' char'配列を 'std :: string'に置き換え、' const' allの寛大な助けを打ちます場所の上に。 –

答えて

9

まず、投稿したコードは、迷子のバックティックで始まります。それが実際にあなたのコードにある場合は、それを削除する必要があります。

第二に、コンパイラは幸せになるだろう、とあなたがライン

return 0; // unreachable 

これは良いC++スタイルで、推奨されて、あなたの関数を終了した場合、少数の警告を発します。 (あなたのケースでは、ラインが実際にラインが良いスタイルが、正しく動作するために必要であるだけでなく、、その場合には、到達可能かもしれません。これを確認してください。)

そうでない場合は、あなたのコードは、いくつかの小さな異議を除くすべての権利を探します古くなったCスタイルの使用については、#defineとし、1つまたは2つの他のマイナーなスタイルのスタイルについては、それを上げることができます。 #defineに関しては、C++ソースコードではありませんが、プリプロセッサディレクティブです。実際にはコンパイラとは別のプログラムによって処理され、コンパイラが見る前に適切なC++コードに置き換えられて置き換えられます。プリプロセッサはセミコロンには関心がありません。これは、#define行がセミコロンで終わらない理由です。 #で始まる他の行は、通常セミコロンで終わっていません。

@JoachimIsakssonが指摘したように、ファイルgeneral_configuration.hまたはファイルhelper_function.hの最後に必要なセミコロンがない可能性があります。各ファイルの最後の行を確認する必要があります。

+0

あなたは正しいです、 hファイルで欠落していました。ありがとう – judith

1

なぜ、#defineに ';'が必要でないのか理解できません。最後に。

の#define文ではありませんが、それはディレクティブを分離することになるとプリプロセッサディレクティブ、およびプリプロセッサは行指向なので。たとえば、2つの#defineを同じ行に置くことはできません。

5

この問題が発生しました。私はヘッダファイルを書きましたが、 ";"機能の分裂の末尾にある。だから、このヘッダファイルを含む私のcファイルにエラーがあります。 私はここにコメントを追加し、それが誰かにとって有用であることを願っています。

関連する問題