【问题标题】:OS161 expected '=', ',', ';', 'asm' or '__attribute__' before errorOS161 在错误之前需要 '='、','、';'、'asm' 或 '__attribute__'
【发布时间】:2012-03-26 09:10:03
【问题描述】:

我正在开发 os161 项目。我创建了一个包含 src/kern/include 中提供的 array.h 的文件。当我编译时,我遇到了这样的错误: ./../include/array.h:85:错误:在 'unsigned' 之前需要 '='、','、';'、'asm' 或 'attribute' ../../include/array.h:91: 错误:在 'void' 之前需要 '='、','、';'、'asm' 或 'attribute'

代码如下:

#ifndef ARRAYINLINE
#define ARRAYINLINE INLINE
#endif

ARRAYINLINE unsigned    --------------line 85 error
array_num(const struct array *a)
{
    return a->num;
}

ARRAYINLINE void *     --------------line 91 error
array_get(const struct array *a, unsigned index)
{
    ARRAYASSERT(index < a->num);
    return a->v[index];
}

这种错误发生在每一行都有类似 INLINE 或 ARRAYINLINE 的内容。提供了这个 array.h 文件,我没有对其进行任何更改。实在想不通为什么。

【问题讨论】:

  • 你能添加 const struct 数组吗?还有更多的代码。你的编译命令是什么?
  • 错误表示编译器无法理解INLINE 是什么。也许#define ARRAYINLINE INLINEdefine ARRAYINLINE inline 请求编译器inline 函数?如果没有,在编译时是否定义了INLINE
  • 尝试在预处理后获取程序文本并显示出来。例如。对于 gcc,它是选项“-E”。最可能的变体是没有定义 INLINE 或奇怪的定义。

标签: c os161


【解决方案1】:

我也在开发 os161。 INLINE 未定义,请尝试改用#define ARRAYINLINE inline

[编辑]

我检查了我的 os161 版本。我在#define ARRAYINLINE INLINE之前发现了这一行

#define INLINE extern inline

所以请检查您的array.h 是否也包含此行(在我的情况下为 115)

[/编辑]

【讨论】:

    【解决方案2】:

    我也在使用 OS161,如果您的函数之外有随机字符,则可能会生成此错误。 示例:

    #include <...>
    ...
    e //<-this random character that could have been mistyped.
    
    sys_fork(...){
    ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      相关资源
      最近更新 更多