[英]Compiling a .cpp file with c++ command instead of g++ (Linux)
假設我們有一個名為hello.cpp
的簡單 C++ 文件,它打印“Hello World!”。
我們通常使用g++ hello.cpp
創建可執行文件。 當我嘗試執行命令c++ hello.cpp
它成功創建了可執行文件。 它不應該拋出一個錯誤,說沒有可用的 c++ 命令嗎? 並建議我們使用 g++?
我嘗試在終端上運行man c++
,這會打開 GNU C 項目頁面。 那么,終端是否在內部用g++ hello.cpp
替換了我們的c++ hello.cpp
? 它不應該這樣做嗎?
附加信息:
同樣,如果我有一個打印“Hello World!”的hello.c
程序。 當我在命令行上執行c hello.c
時,出現錯誤:
$ c hello.c
c: command not found
這是意料之中的,因為我們必須使用gcc hello.c
。 為什么c++ hello.cpp
沒有得到類似的錯誤?
在我的 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 的直接符號鏈接。
它不應該拋出一個錯誤,說沒有可用的 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++
的命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.