我正在尝试编译这个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:语法错误:’int’应该以’;’开头”
我无法理解为什么,#define不需要’;’在末尾.
任何想法?
解决方法
首先,您发布的代码以杂散的反引号开头.如果那真的在你的代码中,你应该删除它.
其次,如果您使用该行结束了您的功能,编译器会更快乐并发出更少的警告
return 0; // unreachable
这是很好的C风格,值得推荐. (在你的情况下,这条线实际上是可以到达的,在这种情况下,这条线不仅是好的风格,而且是正确操作所必需的.检查一下.)
否则,你的代码看起来可以正常,除了一些小的反对意见,可以提出关于#define的过时的,C风格的使用以及关于一个或两个其他小风格点.关于#define,它不是C源代码,而是预处理器指令.它实际上由与编译器不同的程序处理,并在编译器看到它之前被适当的C代码删除并替换.预处理器对分号不感兴趣.这就是#define行不以分号结尾的原因.开始#的其他行也不以分号结尾.
正如@JoachimIsaksson所指出的,在文件general_configuration.h或文件helper_function.h的末尾可能缺少所需的分号.您应该检查每个文件中的最后一行.