我正在尝试编译3个cpp文件,对于其中只有一个,linux上的g ++编译器正在读取每个字符之间的空格,使其无法编译。我得到数百(如果不是数千)的x.cpp:n:n: warning: null character(s) ignored
(其中x是名称,n是数字)。我在Visual Studio中编写了程序,然后将它们复制到linux中。其他2个文件编译正常,我已经完成了几十个项目。这是怎么发生的?
我设法通过创建新文件并从原始cpp复制文本而不是复制文件来解决此问题。
现在,当我尝试启动.o文件
时,我从终端收到错误Permission Denied
答案 0 :(得分:2)
您的编译器问题与换行符无关。
您正在尝试编译保存为UTF-16(Unicode)的文件。如果文件包含任何非ASCII字符,Visual Studio将在您的背后执行此操作。
解决方案1(推荐):坚持使用ASCII。那么问题根本就不会出现。
解决方案2:将文件保存在Visual Studio中,格式为UTF-8,如here所述。您可能需要保存文件而不使用here所述的BOM(字节顺序标记)。
WRT你的另一个问题,找一个名为about:config
的文件(是的,真的)并尝试运行它。并且不要在g ++命令行上指定a.out
。
答案 1 :(得分:0)
没有文字,只有编码文字。
教条推论:
作者为文本文件选择字符编码。
读者必须知道它是什么。
任何形式的共享理解都可以:规范,约定,内部标记,转移时的元数据,....... (即使在上个世纪,在转移时转换的方式也会在某些情况下发生。)
似乎你1)不知道你选择了什么。 2)当你在系统之间复制文件时,没有把这些知识带给你,3)没有告诉GCC。
不幸的是,有一种隐藏这些基本通信需求的文化,而不是谨慎地做到这一点;所以,你的经历太常见了。
告诉GCC,
g++ -finput-charset=utf-16
显然,如果您使用某种支持跟踪相关文本文件所需元数据并传递工具的项目系统,那将是首选。
您可以尝试采用UTF-8 Everywhere。这不会消除沟通的需要(直到本世纪中叶),但它可以使它更加令人愉快。