使用Unicode行分隔符编译UTF-8编码的源

时间:2009-02-15 21:48:45

标签: c visual-studio compiler-construction utf-8 visual-c++

使用最新版本的Microsoft Compiler(包含在Win7 SDK中),我正在尝试编译使用带有unicode行分隔符的UTF-8编码的源文件。

不幸的是,即使我在文件的开头包含UTF-8签名,代码也不会编译。例如,如果我尝试编译它:

#include <stdio.h>

int main (void)
{
    printf("Hello!");
    return 0;
}

我会看到以下错误:


提示&GT; cl test.c

Microsoft(R)32位C / C ++优化编译器版本15.00.30729.01 for 80x86 版权所有(C)Microsoft Corporation。保留所有权利。

test.c的 test.c(1):警告C4067:预处理器指令后的意外令牌 - 预计换行 Microsoft(R)增量链接器版本9.00.30729.01 版权所有(C)Microsoft Corporation。保留所有权利。

/out:test.exe test.obj 链接:致命错误LNK1561:必须定义入口点


以前有人遇到过这个问题吗?任何解决方案?

谢谢! 安德鲁

4 个答案:

答案 0 :(得分:2)

当您说“unicode line separator”时,您的意思是UTF-16 / UCS-2(即16位字符)?如果是这种情况(文件是不同编码的混合),我会说唯一合理的解决方法是修复文件。

如果您的意思是行结尾是其他一些Unicode代码点(仍然以UTF-8编码),那么您仍然需要修复这些文件。标准说明了第一阶段的翻译:

  

物理源文件字符在实现定义中映射   方式,基本来源   字符集(引入换行符   行尾的字符   指标),如有必要。

显然MS不会为'unicode line separator'执行此翻译,因此您需要这样做。

答案 1 :(得分:2)

您是指this character,而不是传统的CR LF字符。

我猜测编译器只期待CR和LF的某种组合。

答案 2 :(得分:2)

向ID提交了错误报告,ID为414985.嗯。我们会看到它的成果。

答案 3 :(得分:0)

对我来说很明显,在#include之后需要换行。

换行符仍然是unicode,所以添加一行不应该是一件大事。