如何启用在GCC反斜线支持?

问题描述 投票:1回答:4

我给了应该在GNU / Linux的编译的项目。正如你可能已经猜到,在该项目的所有头使用反斜杠符号\

我知道,反斜杠是undefined behavior,但我需要编译它。我敢肯定有办法让这个海湾合作委员会的工作,因为MinGW的版本工作正常的反斜杠(我刚查了这一点)。

最有趣的事情是,该项目是在GNU / Linux的应用程序(用于ARM architecture),并有可能在ARM GCC工作得很好。我只是谁本地使用GNU / Linux和想编译一个桌面have an easier debug life应用程序的唯一的家伙。

更换反斜杠反斜杠,迫使同行重新学习使用其它字符是不一样:我只是一个小字辈,但同事谁已经4-7年已经在这里工作;他们只是不会听我的。所以,在这里我们去...

c++ linux gcc compatibility undefined-behavior
4个回答
2
投票

没有一点SED无法修复:)

sed -i '/#include/s/\\/\//g' *.c *.h

5
投票

更换用斜杠反斜杠。告诉你的同事来看看这个堆栈溢出职位。

我已经写C代码为超过24年。反斜线是完全错误的。如果要紧(在事实上,这不,自从Windows乐于使用正斜杠作为路径分隔符,如果提出与他们),这将是达到C编译器来改造他们。


4
投票

你可能意味着#include预处理指令,为文件名相关反斜杠。

我们都知道这是错误的#include-d的路径使用反斜线

目前据我所知没有简单的方法来神奇地将其转化为普通(师)slashs,因为大多数#include处理的是有关查询的主机操作系统的文件系统(通fopen(3)调用open(2)等....)

(如果你有很多时间可以浪费,你可以考虑肮脏qazxsw POI技巧超载qazxsw芋泥等...我不建议这样做)

你可以更简单地使用LD_PRELOAD更改(例如,在你的fopen,或者在您自己的sed(1)脚本调用真正的Makefile,用合适的$HOME/bin/gcc ....)反斜线,当他们出现在/usr/bin/gcc线(只有在这样行) 。

看看GCC源代码里面,它是免费软件,尤其是文件$PATH(负责处理预处理指令);随意打补丁您离奇的需求,以及地方发布自己的补丁!


2
投票

GCC并不关心一个位在#include指令libcpp/directives.c<之间有什么。它只是通过一切归因于操作系统。如果你的操作系统发现它,然后GCC对其进行处理。如果不是这样,它没有。如果您在源在你的Linux目录下名为>(可以)的文件,并#include,它会被发现。

你可以告诉你的同事推他们的傲慢和解决他们的断码。

© www.soinside.com 2019 - 2024. All rights reserved.