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++ 风格,值得推荐。(在你的情况下,这条线实际上可能是可达的,在这种情况下,这条线不仅是好的风格,而且是正确操作所必需的。检查这个。)

否则,您的代码看起来一切正常,除了一些关于过时的 C 风格使用#define以及关于一两个其他次要风格点的小反对意见。关于#define,它不是 C++ 源代码,而是预处理器指令。 它实际上由与编译器不同的程序处理,并在编译器看到它之前被适当的 C++ 代码删除和替换。预处理器对分号不感兴趣。这就是为什么该#define行不以分号结尾的原因。其他开始的行通常也不#以分号结尾。

general_configuration.h正如@JoachimIsaksson 所指出的,文件末尾或文件中可能缺少所需的分号helper_function.h。您应该检查每个文件的最后一行。

于 2012-08-04T12:08:01.420 回答
0

我不明白为什么,#define 不需要';' 在末尾。

因为#define 不是语句,而是预处理器指令,并且在分离指令时预处理器是面向行的。例如,您不能将两个#defines 放在同一行。

于 2012-08-04T12:06:41.377 回答