2013-03-29 36 views
1

我調試一個代碼幾個小時,最後發現它使用!=操作符,而我的眼睛掃描代碼時將其讀取爲=。多年前我總是使用<>運算符Pascal。現在我必須編寫和調試C以使代碼可以被社區重用。於是,我就在下面的命令來定義<>!=如何在C中添加或重新定義運算符?

#define <> != 
#define "<>" "!=" 

但沒有奏效。我試圖在網上搜索,但只有我發現了關於C++或C#的結果,但我需要它的C。 是否有任何可重複使用的機會C使用<>作爲不等式運算符的代碼? (我假設其他normal用戶可以自動替換<>!=,但是代碼也應該在其他系統上編譯而不用修改,即使用<>)。 我使用Linux(gcc)。

+0

這將是一個無效的預處理器宏的名稱。如果你想寫可理解的C代碼,那麼*代碼爲標準*。不要使用這樣的事情。 – WhozCraig

+1

讓我們與真實語言並行。說你不想學習西班牙語。在西班牙語中,一隻貓是'un gato',但事實上,你不喜歡'gato'這個詞,所以你想繼續使用古老的英文'cat'。你可以在東西下看到純粹的邪惡;) – Rerito

+0

即使你可以這樣做,這將是一個非常糟糕的主意......讓你的代碼可讀。 –

回答

3

C沒有運算符重載。期。如果您需要該功能,請使用其他編程語言。

1

您不能在c中重載操作符。

1

由於previousl指出,沒有運營商使用C重載(它是用C++引入只) 但是,你仍然要與<>在你的編譯過程!=更換自動生成文件的選項。

+1

儘管仍然有可能(在編譯之前可以運行一個'sed'命令),但我確實認爲這是一個很壞的主意 – Rerito

+0

。這只是我腦海中唯一的解決方案。如果他真的需要它,這是一種方式......直到有人有更好的解決方案。 – Cyrille

1

運營商的字符不能在任何名義對象,即預處理宏(你的情況),變量名,函數名稱中使用...
所以基本上,你不能做這樣的事情。無論如何,你可以看到我的評論,看看爲什麼這是一個壞主意。

0

如果你建立你的程序及以下線路之一包括在C代碼

#define <> != 
#define "<>" "!=" 

那麼你會得到一個編譯錯誤:

error: macro names must be identifiers 

這意味着名稱的宏應該以一個字母開頭,甚至在宏名稱中使用一些特殊的字符也是有限制的。

可能是你能爲你的宏中使用其他名稱,如:

#define NEQ != 

這是允許的