6

この C++ コードをコンパイルしようとしています。

#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必要ないので、理由がわかりません。';'

4

3 に答える 3

11

この問題に遭遇しました。ヘッダーファイルを書きましたが、「;」を追加するのを忘れていました 関数宣言の末尾。そのため、このヘッダー ファイルをインクルードする C ファイルにエラーがあります。ここにコメントを追加します。誰かにとって役立つことを願っています。

于 2013-03-01T04:35:17.993 に答える
9

まず、投稿したコードは、迷子のバッククォートで始まります。それが本当にコード内にある場合は、削除する必要があります。

第二に、次の行で関数を終了すると、コンパイラはより幸せになり、警告の数が少なくなります。

return 0; // unreachable

これは優れた C++ スタイルであり、推奨されます。(あなたの場合、回線は実際に到達可能である可能性があります。この場合、回線はスタイルが良いだけでなく、正しい操作に必要です。これを確認してください。)

#defineそれ以外の場合、時代遅れの C スタイルの使用と、スタイルの他の 1 つまたは 2 つのマイナーな点に関して、いくつかの小さな異議を唱える可能性があることを除いて、コードは問題ないように見えます。に関しては#define、それ自体は C++ ソース コードではなく、プリプロセッサ ディレクティブです。 実際にはコンパイラとは異なるプログラムによって処理され、コンパイラが認識する前に削除され、適切な C++ コードに置き換えられます。プリプロセッサはセミコロンには関心がありません。#defineこれが、行がセミコロンで終わらない理由です。#通常、セミコロンで終わる他の行もありません。

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

于 2012-08-04T12:08:01.420 に答える
0

そして、なぜ #define に「;」が必要ないのか理解できません。最後に。

#define はステートメントではなく、プリプロセッサ ディレクティブであり、プリプロセッサはディレクティブの分離に関しては行指向であるためです。たとえば、2 つの #define を同じ行に置くことはできません。

于 2012-08-04T12:06:41.377 に答える