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

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

使用最新版本的 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/

相关文章:

c - 加载共享库时出错,安装错位 `.so` 文件到/usr/lib

有效地创建一个新的排序文件,其中包含连续数字的旧未排序文件的内容

c# - 错误 : Object reference not set to an instance of an object. 但在返回 View 中提供了模型

visual-studio - 如何在 Visual Studio 中禁用 ReSharper 并再次启用它?

parsing - 为什么我们不能使用 CFG 来扫描/标记化?

c++ - 为什么FLT_MAX和FLT_MIN不是正负无穷大,它们有什么用?

c - 为什么我得到错误无效指针?

.net - NuGet 恢复包但缺少 DLL

assembly - 在移动垃圾收集实现中,内存引用是如何定位的?

c++ - 在 8 位 block 中使用变量的好方法是什么?