使用最新版本的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:必须定义入口点
以前有人遇到过这个问题吗?任何解决方案?
谢谢! 安德鲁
答案 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,所以添加一行不应该是一件大事。