假設我們有一個名為hello.cpp“Hello World!”的簡單 C 檔案。
我們通常使用g hello.cpp. 當我嘗試執行命令時,c hello.cpp它成功創建了可執行檔案。它不應該拋出一個錯誤,說沒有可用的 c 命令嗎?并建議我們使用 g ?
我嘗試man c 在終端上運行,這會打開 GNU C 專案頁面。那么,根據終端取代我們c hello.cpp與g hello.cpp內部?它不應該這樣做嗎?
附加資訊:
同樣,如果我有一個hello.c列印“Hello World!”的程式。當我c hello.c在命令列上執行時,出現錯誤:
$ c hello.c
c: command not found
這是意料之中的,因為我們必須使用gcc hello.c. 為什么沒有收到類似的錯誤c hello.cpp?
uj5u.com熱心網友回復:
在我的 Ubuntu 系統上,我看到了這個:
$ ls -l /usr/bin/c
lrwxrwxrwx 1 root root 21 May 6 2019 /usr/bin/c -> /etc/alternatives/c
ssd@c3-0:~$ ls -l /etc/alternatives/c
$ ls -l /etc/alternatives/c
lrwxrwxrwx 1 root root 12 May 6 2019 /etc/alternatives/c -> /usr/bin/g
所以c 實際上是g 的別名(符號鏈接)
替代系統允許將編譯器 c 的別名更改為:
$ update-alternatives --display c
c - auto mode
link best version is /usr/bin/g
link currently points to /usr/bin/g
link c is /usr/bin/c
slave c .1.gz is /usr/share/man/man1/c .1.gz
/usr/bin/clang - priority 10
/usr/bin/g - priority 20
slave c .1.gz: /usr/share/man/man1/g .1.gz
所以 c 實際上可以是 g 或 clang
對于 C 編譯器,您不需要c命令,但是cc,又可以是 gcc 或 clang。
我的CentOS系統是不是與符號鏈接這么明顯,但g --version并c --version給出相同的輸出,并都表示,他們是G 。但是, cc 是那里 gcc 的直接符號鏈接。
uj5u.com熱心網友回復:
它不應該拋出一個錯誤,說沒有可用的 c 命令嗎?并建議我們使用 g ?
Weeellll,沒有限制或要求c 命令做任何事情的法規或標準,因此沒有“應該”或“不應該”。然而,強烈期望它c 是一個作業的 C 兼容編譯器,它支持類似或相同的標志cc。
終端是否在內部用 g hello.cpp 替換了我們的 c hello.cpp?
終端是顯示事物的設備。終端不會替換它,它對它沒有影響。
很可能是您的系統設計師,但也可能是管理員、出版商、分銷商或包設計師(或鏈中的任何人),將您的系統配置為提供名為c . 通常,該命令是指向作業 C 編譯器的符號鏈接,在 Linux 系統上通常是 g 。在我的系統上,/usr/bin/c 程式只是安裝了名為 的包gcc,但有些系統允許它是可配置的。
它不應該這樣做嗎?
如上所述,終端不應該替換命令,它對它沒有影響。
這是預期的,因為
這是預期的,因為沒有名為c. 還有無窮無盡的其他未知命令。
cc是 C 編譯器的古老名稱。c99是 C99 兼容編譯器的標準化名稱。
為什么 c hello.cpp 沒有出現類似的錯誤?
因為c 您的系統上存在名為的命令。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/338877.html
