首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++-错误C2144语法错误:'int‘前面应该有';’

C++-错误C2144语法错误:'int‘前面应该有';’
EN

Stack Overflow用户
提问于 2012-08-04 19:51:29
回答 3查看 37.9K关注 0票数 6

我正在尝试编译这段C++代码:

代码语言:javascript
运行
复制
#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最终并不需要';'

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-04 20:08:01

首先,您发布的代码以一个零散的反引号开头。如果这真的在你的代码中,你应该删除它。

其次,如果函数以行结尾,编译器会更高兴,发出的警告也会更少

代码语言:javascript
运行
复制
return 0; // unreachable

这是很好的C++风格,推荐使用。(在您的情况下,线路实际上可能是可到达的,在这种情况下,线路不仅是良好的样式,而且是正确操作所必需的。检查这一点。)

除此之外,您的代码看起来还不错,除了一些关于过时的、C风格的#define用法和其他一两个小的风格方面的反对意见。关于#define,它本身不是C++源代码,而是一个预处理器指令。它实际上是由与编译器不同的程序处理的,并且在编译器看到它之前被删除并替换为适当的C++代码。预处理器对分号不感兴趣。这就是为什么#define行不以分号结尾的原因。以#开头的其他行也是如此,通常以分号结尾。

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

票数 9
EN

Stack Overflow用户

发布于 2013-03-01 12:35:18

我数了一下这个问题。我写了一个头文件,但是我忘了在函数声明的末尾加上";“。所以,在包含这个头文件c文件中有一个错误。我在这里添加评论,希望对某些人有用。

票数 11
EN

Stack Overflow用户

发布于 2012-08-04 20:06:41

我和

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11808432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档