C ++ - 错误C2144语法错误:'int'前面应加';'

时间:2012-08-04 11:51:29

标签: c++

我正在尝试编译这个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最后不需要';'

3 个答案:

答案 0 :(得分:9)

首先,您发布的代码以杂散的反引号开头。如果这确实存在于您的代码中,则应将其删除。

其次,如果你用行结束你的函数,编译器会更快乐并发出更少的警告

return 0; // unreachable

这是很好的C ++风格,值得推荐。 (在你的情况下,该行实际上可以可到达,在这种情况下,该行不仅是好的风格,而且是正确操作所必需的。检查一下。)

否则,你的代码看起来没问题,除了一些可能引起的关于#define的过时,C风格使用以及关于一个或两个其他小风格点的小异议。关于#define,它不是C ++源代码,而是预处理器指令。它实际上由与编译器不同的程序处理,并被删除并替换为适当的C ++代码在编译器看到它之前。预处理器对分号不感兴趣。这就是#define行不以分号结尾的原因。开始#的其他行通常也不以分号结尾。

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

答案 1 :(得分:6)

我列举了这个问题。我写了一个头文件,但我忘了添加“;”在函数声明的尾部。所以,我的c文件中有一个错误,包括这个头文件。 我在这里添加评论,并希望它对某人有用。

答案 2 :(得分:0)

  

我无法理解为什么,#define不需要';'最后。

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