我正在尝试编译这段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
最终并不需要';'
。
发布于 2012-08-04 20:08:01
首先,您发布的代码以一个零散的反引号开头。如果这真的在你的代码中,你应该删除它。
其次,如果函数以行结尾,编译器会更高兴,发出的警告也会更少
return 0; // unreachable
这是很好的C++风格,推荐使用。(在您的情况下,线路实际上可能是可到达的,在这种情况下,线路不仅是良好的样式,而且是正确操作所必需的。检查这一点。)
除此之外,您的代码看起来还不错,除了一些关于过时的、C风格的#define
用法和其他一两个小的风格方面的反对意见。关于#define
,它本身不是C++源代码,而是一个预处理器指令。它实际上是由与编译器不同的程序处理的,并且在编译器看到它之前被删除并替换为适当的C++代码。预处理器对分号不感兴趣。这就是为什么#define
行不以分号结尾的原因。以#
开头的其他行也是如此,通常以分号结尾。
正如@JoachimIsaksson所指出的,文件general_configuration.h
或文件helper_function.h
的末尾可能缺少所需的分号。您应该检查每个文件中的最后一行。
发布于 2013-03-01 12:35:18
我数了一下这个问题。我写了一个头文件,但是我忘了在函数声明的末尾加上";“。所以,在包含这个头文件c文件中有一个错误。我在这里添加评论,希望对某些人有用。
发布于 2012-08-04 20:06:41
我和
都不明白为什么,#define在末尾不需要';‘。
因为#define不是一个语句,而是一个预处理器指令,而预处理器在分隔指令时是面向行的。例如,您不能将两个#定义放在同一行上。
https://stackoverflow.com/questions/11808432
复制相似问题