使用最新版本的 Microsoft 编译器(包含在 Win7 SDK 中),我正在尝试编译使用带有 unicode 行分隔符的 UTF-8 编码的源文件。
不幸的是,代码无法编译——即使我在文件开头包含 UTF-8 签名。例如,如果我尝试编译这个:
#include <stdio.h>
int main (void)
{
printf("Hello!");
return 0;
}
我会看到以下错误:
提示符> cl test.c
Microsoft (R) 32 位 C/C++ 优化编译器版本 15.00.30729.01 for 80x86 版权所有 (C) Microsoft Corporation。保留所有权利。
测试.c test.c(1):警告 C4067:预处理器指令后出现意外标记 - 期待一个换行符 Microsoft (R) 增量链接器版本 9.00.30729.01 版权所有 (C) Microsoft Corporation。保留所有权利。
/out:test.exe 测试对象 LINK: fatal error LNK1561:必须定义入口点
有没有人遇到过这个问题?有什么解决办法吗?
谢谢! 安德鲁
最佳答案
当您说“unicode 行分隔符”时,您指的是 UTF-16/UCS-2(即 16 位字符)吗?如果是这种情况(文件是不同编码的混合),我会说唯一合理的解决方法是修复文件。
如果您的意思是行尾是其他一些 Unicode 代码点(仍然以 UTF-8 编码),那么您仍然需要修复这些文件。该标准关于翻译的第一阶段是这样说的:
Physical source file characters are mapped, in an implementation-defined manner, to the basic source character set (introducing newline characters for end-of-line indicators) if necessary.
显然 MS 不会为“unicode 行分隔符”执行此转换,因此您需要这样做。
关于使用 Unicode 行分隔符编译 UTF-8 编码的源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/551656/