假设我们有一个简单的c++文件,名为hello.cpp,它打印"Hello!“。
我们通常使用g++ hello.cpp创建可执行文件。当我尝试执行命令c++ hello.cpp时,它成功地创建了可执行文件。它是否应该抛出一个错误,说明没有可用的c++命令?并建议我们使用g++?
我试着在终端上运行man c++,这会打开GNU项目页面。那么,终端是否在内部将我们的c++ hello.cpp替换为g++ hello.cpp?它不应该这样做对吧?
附加信息:
同样,如果我有一个打印"Hello!“的hello.c程序。当我在命令行上执行c hello.c时,会得到以下错误:
$ c hello.c
c: command not found这是预期的,因为我们必须使用gcc hello.c。为什么c++ hello.cpp没有得到类似的错误?
发布于 2021-10-27 00:07:55
它是否应该抛出一个错误,说明没有可用的c++命令?并建议我们使用g++?
当然,没有任何规则或标准限制或要求c++命令来做任何事情,所以没有“应该”或“不应该”。但是,人们强烈期望c++是一个可工作的C++兼容编译器,它支持与cc类似或相同的标志。
终端内部是否将我们的c++ hello.cpp替换为g++ hello.cpp?
终端是显示事物的设备。终端没有取代它,它对它没有影响。
很可能是您的系统设计器,但可能是管理员、发行者或分发服务器或包设计器(或链中的任何人)将您的系统配置为提供一个名为c++的命令。通常,该命令是指向工作的C++编译器的符号链接,通常是Linux系统上的g++。在我的系统上,/usr/bin/c++程序只是与gcc一起安装的,但是有些系统允许它是可配置。
它不应该这样做对吧?
如前所述,终端不应替换命令,对其没有任何影响。
这是预期,因为
它是预期的,因为没有名为c的命令。还有无数其他未知的命令。
cc是C编译器的老名字。c99是C99兼容编译器的标准化名称。
为什么c++ hello.cpp没有得到类似的错误?
因为您的系统上存在一个名为c++的命令。
发布于 2021-10-27 00:04:41
在我的Ubuntu系统中,我看到:
$ ls -l /usr/bin/c++
lrwxrwxrwx 1 root root 21 May 6 2019 /usr/bin/c++ -> /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直接联系在一起的。
https://stackoverflow.com/questions/69731174
复制相似问题