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

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

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

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

我会看到以下错误:


提示> cl test.c

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

test.c test.c(1):警告C4067:预处理器指令后面的意外令牌 – 预期换行符Microsoft(R)Incremental Linker Version 9.00.30729.01版权所有(C)Microsoft Corporation。 版权所有。

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


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

谢谢! 安德鲁

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

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

如果需要,物理源文件字符以实现定义的方式映射到基本源字符集(为行尾指示符引入换行符)。

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

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

你是指这个角色 ,而不是传统的CR LF角色。

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

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

换行仍然是unicode,所以添加一个也不应该是一个大问题。