我正在尝试编译这个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
最后不需要';'
。
答案 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放在同一行上。