簡體   English   中英

如何在GCC中啟用反斜杠支持?

[英]How do I enable backslash support in GCC?

我給出了一個應在GNU / Linux下編譯的項目。 您可能已經猜到了,項目中的所有標題都使用反斜杠符號\\

我知道,反斜杠是未定義的行為 ,但是我需要對其進行編譯。 我非常確定,有一種方法可以使GCC與此一起工作,因為MinGW版本可以在反斜杠上正常工作(我剛剛檢查了一下)。

最有趣的是,該項目是用於GNU / Linux的應用程序(用於ARM體系結構 ),並且ARM GCC可能工作得很好。 我只是唯一一個本機使用GNU / Linux的人,並希望將其編譯為桌面應用程序以簡化調試工作

用反斜杠代替斜杠並強迫同事重新學習使用其他字符的方法不是:我只是大三,而是已經在這里工作4至7年的同事。 他們只是聽不到我的聲音。 所以,我們開始...

用反斜杠替換反斜杠。 告訴您的同事查看此Stack Overflow帖子。

我從事C代碼已有24年了。 反斜杠只是普通WRONG 如果這很重要(實際上並不重要,因為Windows很高興使用正斜杠作為路徑分隔符(如果出現),則由C編譯器來轉換它們。

您可能在#include預處理程序指令中的反斜杠與文件名有關。

而且我們都知道在#include -d路徑中使用反斜杠是錯誤的

沒有AFAIK沒有簡單的方法可以將它們神奇地轉換為普通(除法)斜線,因為大多數#include處理都是關於查詢主機操作系統文件系統的(通過fopen(3)調用open(2)等。)

(如果您有很多時間可以浪費,那么您可能會考慮使用LD_PRELOAD技巧來使fopen重載,等等。我不建議這樣做)

您可以更簡單地使用sed(1)進行更改(例如,在您的Makefile ,或者在您自己的$HOME/bin/gcc腳本中,使用合適的$PATH調用實際的/usr/bin/gcc ...。)當反斜杠出現在#include行中時( 在此類行中)。

查看GCC源代碼,它是免費軟件,尤其是文件libcpp / directives.c (用於處理預處理程序指令); 隨時為您的奇異需求打補丁,然后將補丁發布到某個地方!

GCC不在乎#include指令中<>之間的含義。 它只是將其全部傳遞給操作系統。 如果您的操作系統找到它,則GCC對其進行處理。 如果不是,則不是。 如果您在Linux目錄中創建了一個名為foo\\bar.h的文件(可以),並且在源代碼中包含#include "foo\\bar.h" ,則將找到該文件。

您可以告訴您的同事推崇他們的傲慢並修復其損壞的代碼。

一點sed無法解決:)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM