c - 错误 : stray '\302' in program

标签 c utf-8 kernel embedded

我有以下代码(更具体的是内核代码):

static int is_sram_locked(void)
{
if (OMAP2_DEVICE_TYPE_GP == omap_type()) {
    /* RAMFW: R/W access to all initiators for all qualifier sets */
    if (cpu_is_omap242x()) {
        __raw_writel(0xFF, OMAP24XX_VA_REQINFOPERM0); /* all q-vects */
        __raw_writel(0xCFDE, OMAP24XX_VA_READPERM0);  /* all i-read */
        __raw_writel(0xCFDE, OMAP24XX_VA_WRITEPERM0); /* all i-write */
    }
    if (cpu_is_omap34xx() && !cpu_is_am33xx()) {
        __raw_writel(0xFFFF, OMAP34XX_VA_REQINFOPERM0); /* all q-vects */
        __raw_writel(0xFFFF, OMAP34XX_VA_READPERM0);  /* all i-read */
        __raw_writel(0xFFFF, OMAP34XX_VA_WRITEPERM0); /* all i-write */
        __raw_writel(0x0, OMAP34XX_VA_ADDR_MATCH2);
        __raw_writel(0xFFFFFFFF, OMAP34XX_VA_SMS_RG_ATT0);
    }
    return 0;
} else
    return 1; /* assume locked with no PPA or security driver */
}

这是从 sublime 3 复制粘贴的,如标题所述,我得到以下编译错误:

error: stray '\302' in program
error: stray '\273' in program

在以 __raw_writel( ... ) 开头的行上

我已经对这个问题进行了研究,我发现这个错误告诉我 cause 行中有一个不可打印的字符。

'\302\273' 是 '»' 的 UTF-8 代码(右指双角引号)

我了解到,当您从其他地方复制粘贴代码时,经常会出现此问题,而那些不可打印的字符可能会跳过您的注意力,或者您的键盘布局不同,会键入奇怪的字符。我非常仔细地检查了代码,没有找到任何外来字符。

我的大问题是我从未接触过的内核代码怎么会出现这样的错误?我有不止一个文件出现此错误,这让我意识到可能还有其他问题。

我发现我在以除字母以外的任何其他字母开头的行上遇到此错误,例如:'_' 和 '.' (这些是到目前为止对我来说引起问题的例子)

我尝试过的解决方案:

  • 重写整行;
  • 将代码复制粘贴到许多 UTF-8 不可打印的字符过滤器中,这样我就可以找到“杂散”字符
  • Unicode 字符荧光笔 sublime 包

注意:我还使用 vim 作为编辑器,我的 .vimrc 将“»”作为 TABS,将“·”作为空格,但仅用于缩进目的,而不是作为实际字符。当我从 vim 复制粘贴并且这些字符实际上在文本中时,我已经修复了一些类似的错误,我删除了这些字符并且它得到了修复。但是为此我无法识别代码中存在的任何“杂散”字符。

我不知道我可以尝试克服这个问题,所以我请求你的帮助。

最佳答案

宏是问题所在。他们提到了一些我用一些复制粘贴代码修改过的宏,然后完全忘记了。

特别感谢大家。

关于c - 错误 : stray '\302' in program,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30979387/

相关文章:

c - 为什么将指向数组的指针传递给需要指向 int 的指针的函数可以正常工作而不会出现错误

c - 在进程之间分配几乎均等的任务

c - 循环内的结构数组

c++ - 链接到内核

c - 如何在 pcre2_substitute 中设置输出大小

mysql - 使用 utf8_encode()(php 函数)的国际化内容最佳实践

java - 项目编码设置为 UTF-8,默认字符集返回 windows-1252

linux - Linux 上 Qt Creator 中的 UTF-8

multithreading - 如何产生延迟

crash - 从崩溃转储+ Windbg [BSOD]中检索IOCTL输入缓冲区内容