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