2012-12-20 57 views
6

這個問題是爲了響應What is &&& operation in C,這讓我想到&被用作二進制AND和地址。爲什麼`&`用於C中的二進制AND和地址?

爲什麼相同的符號用於這兩個非常不相似的任務?想想看,@似乎是一個更好的地址符號。

我不希望它在實踐中引起太多問題,因爲編譯器可能會捕獲大多數錯誤的用法,但可能會創建包含宏的代碼,看起來像是在執行二進制AND,而實際上它做地址。

+0

我一直在想這個。 Pascal使用'@',這對我來說似乎更加直觀 –

回答

7

原因@沒有用於「地址」(如你所說將是一個不錯的選擇)是該字符不是ISO 646 character set,這實際上是在C.

的早期使用的背部的一部分

確實,C 的設計者可以使用並使用@併爲其設計了trigraph序列,但我懷疑他們認爲這並不是真正值得的麻煩。 &&&可以出現在人們的代碼中的事實可能不被認爲是選擇不同運營商符號的理由。

+0

一致認爲,人類任何含糊不清的唯一原因是人們試圖通過省略空白和使用模糊的語言特徵來實現聰明,而不是實際上*是聰明的...... – thkala

+0

+1:我預料會出現一些歷史原因。更有限的字符集解釋了爲什麼相同的字符用於多種含義。當我質疑爲什麼'&'有多種用途時,我並沒有想到'&&&'。更多的東西像'a&b',其中'a'最終由'#define a'設置。這看起來像一個「AND」,但事實上並非如此。希望編譯器能夠發現錯誤,但這完全取決於你使用的結果。 – Leo

7

我不認爲有什麼大的原因,爲什麼它用於2個不同的事情。

幸運的是,語言中沒有歧義,因爲一個用法是一元操作符,另一個用法是二元操作符(即有兩個操作數)。 *(乘法或取消引用)同上。

+0

+1,特別是對於同上 – Thilo

+0

它也用於按位AND。所以它也可以是二元運算符。 – SidR

+0

^^通過二進制和,他的意思是按位與。 &&被稱爲邏輯和。 – anishsane

相關問題