【问题标题】:error: expected expression before '/' token错误:“/”标记之前的预期表达式
【发布时间】:2011-04-14 13:29:48
【问题描述】:

我不是 C 专家,在尝试交叉编译 C 应用程序时遇到此错误:

src/ls_sqlite3.c:522: error: expected expression before '/' token

有问题的行是这样的:

sqlite3_busy_timeout(conn, lua_tonumber(L,3)); // TODO: remove this

我怀疑某些编译器或某些设置不允许使用 // 用于 cmets,但 Google 没有提供帮助。有人知道吗?

谢谢。

【问题讨论】:

  • 严格的 C 编译器不接受 C++ 样式的 cmets。
  • 确实只有 /* ... */ 可以用旧的 C 语言进行评论(我不记得确切的版本了)。
  • 我认为 // 是 C++ 风格的注释,从 C99 开始可用。也许您的编译器遵循 C89?
  • @steabert:我发现当使用-std=c99 -pedantic 调用时,gcc 对 C++ 样式的 cmets 不屑一顾
  • 奇怪,来自man gcc:“例如 -std=gnu89 -pedantic 会警告 C++ 样式 // cmets,而 -std=gnu99 -pedantic 不会。”

标签: c


【解决方案1】:

在旧的 C 标准中,仅允许的 cmets 是 /*...*/。只有从 C99 标准开始,// 才允许作为 cmets。

【讨论】:

  • 谢谢大家。原始 Makefile 确实使用了“-ansi”:将其替换为“-std=c99”解决了这个问题。
【解决方案2】:

因为你没有提到你的编译器。你可以把它改成 c 风格的 cmets

sqlite3_busy_timeout(conn, lua_tonumber(L,3)); /* TODO: remove this */

查看您的编译器手册,了解 c++ 样式 cmets 的兼容性开关。

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 2015-03-28
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 2017-09-24
    • 2012-03-09
    相关资源
    最近更新 更多