【问题标题】:Misplaced preprocessor character '\'错误放置的预处理器字符“\”
【发布时间】:2021-10-02 00:38:50
【问题描述】:

我正在尝试获取一堆 1994 年为 Panasonic 3DO lib 编写的 C 模块,以便使用 armcc 进行编译。我遇到了一个我有点困惑的错误。我对 C 的了解并不深,所以也许你们中的一个人会帮助我解决这个问题:

#define DS_MSG_HEADER   \
    long        whatToDo;   /* opcode determining msg contents */               \
    Item        msgItem;    /* message item for sending this buffer */          \
    void*       privatePtr; /* ptr to sender's private data */                  \
    void*       link        /* user defined -- for linking msg into lists */

这个库的许多包含文件中都使用了 \ 字符我不熟悉这种语法......而且 ARM 编译器似乎讨厌它。

Serious error: misplaced preprocessor character '\'

如果您知道为什么要使用这些 \ 字符,请解释一下吗? (对不起,如果它是一个菜鸟问题)另外,有没有另一种方法来写这个,所以编译器很高兴?

【问题讨论】:

  • 尝试使用编译器未标记为错误的宏。
  • 显示的代码本身应该很好。暗中刺探:通过dos2unix 运行所有.c.h 文件。如果解决了,我会解释的。如果没有,我们将需要您构建我们称之为MCVE 的东西——一个最小但完整的示例程序,我们可以自己编译它并得到与您遇到的相同的错误。
  • 确保反斜杠字符后没有任何空格 - 它必须是该行的最后一个字符。
  • 请注意,1994 年编写的用于在视频游戏机上运行的程序很可能因其他几个原因而被现代 C 编译器所反对。
  • @JohnBode 感谢您的提示。我从 Macintosh 风格的行尾更改为 Unix 风格,错误消失了:)

标签: c arm armcc


【解决方案1】:

如果显示的反斜杠 '\' 不是该行的最后一个字符,则会显示此错误(以及其他原因)。

我能想到两个原因:

  1. 在反斜杠后面至少有一个空格(空格、制表符)。

    我从来没有遇到过这个问题。

  2. 源以 Windows 样式的行尾标记存储,即 '\r''\n'、“回车”和“换行”。而且您正试图在类 Unix 系统(Linux?)上编译它,或者通过需要类 Unix 行尾标记的编译器来编译它,即只有 '\n',“换行符”。 (或者反过来。)

    这是一个很常见的问题,它一次又一次地困扰着我。

无论如何,在功能强大的编辑器中打开源代码并启用“不可见字符”的可见性,通常是带有此图标的选项:。检查空格。然后检查行尾的编码。使用适当的保存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2013-12-28
    • 1970-01-01
    • 2013-08-26
    相关资源
    最近更新 更多