使用 c++ 命令而不是 g++ 编译 .cpp 文件 (Linux)
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 项目页面。那么,终端是否在内部将我们的c++ hello.cpp
替换为g++ 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++
$ ls -l /etc/alternatives/c++
lrwxrwxrwx 1 root root 12 May 6 2019 /etc/alternatives/c++ -> /usr/bin/g++
所以c++实际上是g++
的别名(符号link)
替代系统允许将编译器 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 系统对于 symlinks 不是很明显,但是 g++ --version
和 c++ --version
给出相同的输出并且都说它们是 g++。然而,cc 是 gcc 那里的直接 symlink。
Shouldn't it throw an error saying there is no c++ command available? and suggest us to use g++?
Weelll,没有任何法规或标准限制或要求 c++
命令执行任何操作,因此没有“应该”或“不应该”之分。但是,强烈希望 c++
是一个工作的 C++ 兼容编译器,它支持与 cc
相似或相同的标志。
does the terminal replace our c++ hello.cpp with g++ hello.cpp internally?
终端是显示事物的设备。终端不替换,对它没有影响
很可能是您的系统设计者,但也可能是管理员或出版商或分销商或包装设计者(或链中的任何人)将您的系统配置为提供名为 c++
的命令。通常,该命令是一个符号 link 到一个工作的 C++ 编译器,通常是 Linux 系统上的 g++。在我的系统上,/usr/bin/c++
程序与 package named gcc
, but some systems allow it to be configurable.
一起安装
It shouldn't do that right?
如上所述,终端不应该替换命令,它对它没有影响。
This is expected since
这是预期的,因为没有名为 c
的命令。还有无穷无尽的其他未知命令。
cc
is the good old name for a C compiler. c99
是C99兼容编译器的标准名称
Why am not getting a similar error for the c++ hello.cpp?
因为您的系统中存在名为 c++
的命令。
假设我们有一个名为 hello.cpp
的简单 C++ 文件,它打印“Hello World!”。
我们通常使用 g++ hello.cpp
创建可执行文件。当我尝试执行命令 c++ hello.cpp
时,它成功创建了可执行文件。它不应该抛出一个错误,说没有可用的 c++ 命令吗?并建议我们使用 g++?
我在终端上尝试了 运行 man c++
,这会打开 GNU C 项目页面。那么,终端是否在内部将我们的c++ hello.cpp
替换为g++ 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++
$ ls -l /etc/alternatives/c++
lrwxrwxrwx 1 root root 12 May 6 2019 /etc/alternatives/c++ -> /usr/bin/g++
所以c++实际上是g++
的别名(符号link)替代系统允许将编译器 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 系统对于 symlinks 不是很明显,但是 g++ --version
和 c++ --version
给出相同的输出并且都说它们是 g++。然而,cc 是 gcc 那里的直接 symlink。
Shouldn't it throw an error saying there is no c++ command available? and suggest us to use g++?
Weelll,没有任何法规或标准限制或要求 c++
命令执行任何操作,因此没有“应该”或“不应该”之分。但是,强烈希望 c++
是一个工作的 C++ 兼容编译器,它支持与 cc
相似或相同的标志。
does the terminal replace our c++ hello.cpp with g++ hello.cpp internally?
终端是显示事物的设备。终端不替换,对它没有影响
很可能是您的系统设计者,但也可能是管理员或出版商或分销商或包装设计者(或链中的任何人)将您的系统配置为提供名为 c++
的命令。通常,该命令是一个符号 link 到一个工作的 C++ 编译器,通常是 Linux 系统上的 g++。在我的系统上,/usr/bin/c++
程序与 package named gcc
, but some systems allow it to be configurable.
It shouldn't do that right?
如上所述,终端不应该替换命令,它对它没有影响。
This is expected since
这是预期的,因为没有名为 c
的命令。还有无穷无尽的其他未知命令。
cc
is the good old name for a C compiler. c99
是C99兼容编译器的标准名称
Why am not getting a similar error for the c++ hello.cpp?
因为您的系统中存在名为 c++
的命令。