C 错误:应为';)';在'之前*';代币
我有这个包含文件(C 错误:应为';)';在'之前*';代币,c,C,我有这个包含文件(memory.h) 以及这个实现文件(memory.c) #包括 #包括“memory.h” 无效的 内存_init(内存*mymemory,int size) { mymemory->cells=(int*)malloc(sizeof(int)*size); mymemory->cells\u number=大小; mymemory->current_cell=(int*)((mymemory->cells_number/2)*sizeof(int)); } ... //其他
memory.h
)
以及这个实现文件(memory.c
)
#包括
#包括“memory.h”
无效的
内存_init(内存*mymemory,int size)
{
mymemory->cells=(int*)malloc(sizeof(int)*size);
mymemory->cells\u number=大小;
mymemory->current_cell=(int*)((mymemory->cells_number/2)*sizeof(int));
}
... //其他函数定义如下
当我试图编译memory.c
时,每个函数定义都会出现这个错误
src/memory.c:5:错误:在“*”标记之前应为“')
其中第5行是memory\u init()的函数定义
有人能告诉我为什么会出现此错误吗?因为系统内存.h
正在隐藏您的内存.h
,导致\include
在不声明您的类型的情况下成功。几种可能的修复方法:
- 重命名您的文件——在任何情况下都可能是最好的,以减少潜在的混乱
- 通过前缀子目录包含文件(例如,
#Include
)
- 将文件移动到与源文件相同的目录中,允许
#include
优先规则对“
中包装的文件名生效
- 确保C预处理器包含路径选项将项目头路径放在系统头路径之前
这个答案真的很晚了,但我遇到了一个类似的问题
我认为您的问题与.h文件中的一个输入错误有关,您在该文件中声明了一个structmmemory。如果您删除了额外的“m”,它应该会起作用。在您的代码中,您对memory.h的定义是这样的
#ifndef MEMORY_H
#define MEMORY_H
...
...
#endif
如果您在项目中使用的任何其他文件具有相同的#define,即内存#H,则可能会出现此错误
解决方案:
#ifndef XYZ_MEMORY_H
#define XYZ_MEMORY_H
...
...
#endif
OSX Snow Leopard上的gcc版本4.2.1,带有-ansi开关,在包含标题之前可能已经定义了其他一些标题?为了避免将来的问题,是否有标准C标题名称的快速参考?@klez这似乎是一个现有的问题:。在这种情况下,与标准相关的列表不会有帮助,因为memory.h
不是一个标准的头文件。你总是可以看到你的特定操作系统提供了什么,比如find/usr/include/-typef-name'*.h'
。当然,前提是你的特定操作系统具有find
,并将头文件保存在/usr/include/
中。不是所有人都有幸运行这样的操作系统。你的答案是什么真的很晚了,问题不在于:-)无论如何,谢谢
#ifndef MEMORY_H
#define MEMORY_H
...
...
#endif
#ifndef XYZ_MEMORY_H
#define XYZ_MEMORY_H
...
...
#endif