2016-12-04 99 views
2

我看到this code,我看到這個_號(內主())...
我從來沒有見過在使用這個標誌,並從來沒有讀過任何地方,
它是幹什麼用的呢?C中(Underscore)的用法是什麼?

+0

難以理解代碼的混淆。 –

+0

[C變量名稱定義中下劃線的原因是什麼?](https://stackoverflow.com/questions/8093336/what-is-the-reason-for-underscore-in-c-variable-name-definition) – jww

回答

4

這只是一個標識符,它是有效的。您自己可以使用_作爲標識符。

例如,你可以做到這一點

int _; 

,使得_int類型的變量。

該代碼雖然揭示了一個根本性的問題,因爲它從程序中調用main()。這樣做會引發未定義的行爲。

+0

這意味着'_'被用來命名_some variable_?。 .. –

+0

@MukulKumar是的,確切地說。 –

+0

爲什麼會_it_ call main()? –

2

下劃線是C中變量和函數名稱中允許使用的字符之一。它不常用,特別是在名稱的開始或結尾處。由於這個原因,所以它有時是有用的:

  • 在一個庫中定義一個變量名,這個變量名不可能與同一範圍內的另一個名字衝突;
  • 編寫易混淆的代碼。

您的示例在第二個版本中使用它,例如通過定義一個簡稱爲_的變量。

1

您正在查看C代碼混淆的示例。

程序員使用一個下劃線_作爲main函數的第二個參數的名稱。

他使用舊式聲明main()有點相當於現代int main(int t, int _, char *a)

這原型main是每C標準的所有版本均無效,但在某些系統上可以起到和main函數實際上遞歸調用自己與預期類型的​​參數。該程序可以通過測試確定是否是主要調用t > 0。這是不可移植的,因爲對於不同的原型可以傳遞不同的參數。

混淆C是一款針對高級C程序員的遊戲,可以達到驚人的複雜程度。

有一個全球性的競爭:The International Obfuscated C Code Contest

很多world class programmers已經花費無數個小時拋光驚人的代碼寶石,其中包括Fabrice Bellard編寫的compiler for a subset of C,可以自行編譯。

另外還有一個無目標程序員的遊戲:代碼打高爾夫球。目標是制定最小的程序來解決一個給定的問題。 Stack Exchange有一個完整的網站致力於此活動:https://codegolf.stackexchange.com/。樂趣和快樂浪費更多時間。

+0

https://www.quora.com/What-is-the-most-obfuscated- C代碼 - 你曾經見過.....看第4個答案(甜甜圈一個)...這太神奇了! –

+0

@MukulKumar:確實可愛,第一個不太理想:'count'沒有被使用,'main'原型可以以很低的成本達到標準。感謝您的鏈接。 – chqrlie