gcc 和 g++/gcc-c++ 有什么区别?

2023-12-11

在我看来,gcc 可以处理 c 和 c++ 项目,那么为什么需要 g++/gcc-c++ 呢?

g++ 和 gcc-c++ 有什么区别?


gcc如果文件具有适当的扩展名,则将 C 源文件编译为 C,将 C++ 源文件编译为 C++;但是它不会自动链接到 C++ 库中。

g++将自动包含 C++ 库;默认情况下,它还会将带有扩展名的文件编译为 C++,而不是 C。

From http://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html#Invoking-G_002b_002b:

C++ 源文件通常使用以下后缀之一.C, .cc, .cpp, .CPP, .c++, .cp, or .cxx; C++经常使用的头文件.hh, .hpp, .H,或(对于共享模板代码).tcc;预处理的 C++ 文件使用后缀.ii。即使您以与编译 C 程序相同的方式调用编译器(通常使用名称 gcc),GCC 也会识别具有这些名称的文件并将它们编译为 C++ 程序。

但是,使用gcc并不会添加C++库。 g++是一个调用GCC并处理的程序.c, .h and .i除非使用 -x,否则将文件视为 C++ 源文件而不是 C 源文件,并自动指定针对 C++ 库的链接。当使用以下命令预编译 C 头文件时,该程序也很有用.h用于 C++ 编译的扩展。

例如,编译一个简单的 C++ 程序,写入std::cout流,我可以使用其中一个(Windows 上的 MinGW):

  • g++ -o test.exe test.cpp
  • gcc -o test.exe test.cpp -lstdc++

但如果我尝试:

  • gcc -o test.exe test.cpp

我在链接时得到未定义的引用。

对于其他区别,以下 C 程序:

#include <stdlib.h>
#include <stdio.h>

int main() 
{
    int* new;
    int* p = malloc(sizeof(int));

    *p = 42;
    new = p;

    printf("The answer: %d\n", *new);

    return 0;
}

使用以下命令编译并运行良好:

  • gcc -o test.exe test.c

但使用编译时会出现几个错误:

  • g++ -o test.exe test.c

Errors:

test.c: In function 'int main()':
test.c:6:10: error: expected unqualified-id before 'new'
test.c:6:10: error: expected initializer before 'new'
test.c:7:32: error: invalid conversion from 'void*' to 'int*'
test.c:10:9: error: expected type-specifier before '=' token
test.c:10:11: error: lvalue required as left operand of assignment
test.c:12:36: error: expected type-specifier before ')' token
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gcc 和 g++/gcc-c++ 有什么区别? 的相关文章

随机推荐

  • 使用 Sunspot 从 Solr 索引中排除文章草稿

    我有一个名为 Article 的索引模型 我不希望 solr 索引未发布的文章 class Article lt ActiveRecord Base searchable do text title text body end end 我怎
  • Deviseomniauthable 因“无法找到有效的路径映射”而破坏 Omniauth 身份验证

    在我的项目中 我有两种类型的用户 求职者和招聘经理 求职者没有模型 他们只能使用从第三方提供商收到的数据来申请工作 同时通过 Omniauth 进行身份验证 招聘经理的信息存储在设计用户模型中 招聘经理还必须能够使用其公司的 Google
  • mysql where语句日期问题

    希望有人能帮忙 我想做的是从数据库中提取任何给定月份的所有结果 是否可以仅使用 mysql 查询 无 php 我使用一个模板应用程序 我唯一的访问权限是通过 mysql where 语句 所以我需要从 2013 04 01 算出月份是什么
  • 求解具有变量约束的非线性方程组

    使用 fsolve 求解非线性方程组的一些假设示例 from scipy optimize import fsolve import math def equations p x y p return x y 2 4 math exp x
  • 不使用主键的映射中流畅的 NHibernate 连接表

    我正在尝试从 2 个不通过主键相关的表创建一个实体 Tables CREATE TABLE employees ssn nvarchar 9 NULL active bit NULL employee id int IDENTITY 1 1
  • Android:如何制作带有 2 行文本和 RadioButton(单选)的 AlertDialog?

    如何制作包含如下行的列表对话框 FIRST LINE OF TEXT o lt this is a RadioButton second line of text 我知道我应该使用自定义适配器 通过这些视图传递行布局 实际上 我已经这样做了
  • 更新文档时出现错误:由于值未定义,转换为字符串失败

    我有一个简单的文档 其中包含名称 必需 和描述 可选 在我的模型中 我使用有效 ID 更新文档 并传递值为未定义的描述 因为我想从文档中删除此属性 但是 我收到以下错误 消息 转换为字符串失败 路径 描述 处的值 未定义 名称 CastEr
  • Magento:如何在客户信息字段中显示客户的电话号码

    我试图让客户的电话号码显示在客户帐户信息部分下 我知道电话号码属于客户地址部分 但我正在尝试重新设计客户帐户信息的外观 我为客户 ID 添加了一个新的自定义字段 并且可以使用以下代码显示它 因为客户 ID 属于 customer entit
  • 在 cakephp 中验证输入文件

    在 cakephp 中 我试图检查文件输入字段是否附加了文件 如果没有则输出错误 我已经在其他领域做到了这一点 但似乎无法让它在该领域发挥作用 这是模型 array notempty uploadeduploaded file gt arr
  • 将输入的数据存储在数组中[重复]

    这个问题在这里已经有答案了 我是 C 初学者 如果我的问题很蹩脚 请不要介意 在我编写的这个程序中 当我第一次使用 for 循环时 我预计数组中仅存储 3 个值 但它存储 4 个值 并且在下一个 for 循环中按预期显示 3 个值 我的问题
  • 如何避免触发器内的 ORA-04091 错误

    我在表 A 上有一个更新后触发器 触发器 A 可以对表 B 进行更改 我在表 B 上还有一个更新后触发器 触发器 B 它不进行任何更改 但查询表 A 以对非规范化进行一些健全性检查 因此触发器 B 可以通过以下两种方式之一触发 如果我直接更
  • 带重定向的 Node.js 包罗万象的路由始终使用 Angular 呈现索引页面,无论 url 是什么

    本质上当我使用包罗万象的路线并使用res redirect 无论我输入的网址如何 它总是会呈现索引 主页 即 Angular 似乎没有 看到 完整的网址 但是如果我放置res render index 在包罗万象的路线中一切正常 我不想重复
  • Python:静态变量装饰器

    我想创建一个如下所示的装饰器 但我似乎想不出可行的实现 我开始认为这是不可能的 但我想我应该先问你们 我意识到在 Python 中还有各种其他方法来创建静态变量 但我发现这些方法很丑陋 如果可能的话 我真的很想使用下面的语法 static
  • 如何查看 SQL Server Management Studio 编辑器中制表位的位置?

    我使用语音识别来听写 SQL 而将事情排列起来很痛苦 如果我能看到制表位在哪里 那会节省我很多时间 Management Studio 支持一项未记录的功能 Visual Studio 也有 它将垂直引导线添加到编辑器窗口的特定列位置 使用
  • 无法在 Linux 机器上通过 ODBC 连接到 informix

    我正在运行 CentOS 7 的虚拟机上工作 并且尝试通过一些 php 使用 ODBC unixODBC 连接到 Informix 数据库 我使用的是 php7 0 并且安装了 unixODBC 2 3 7 以及 informix sdk
  • 创建自定义 MutableState 持有者

    Compose 仅 允许有限数量的状态持有者 包括所有原始数据类型和一些额外的附加组件 但不支持自定义对象或任何更复杂的对象 例如Path 我希望确保对这些类型的更改也能很好地观察到 因此我想为这些类型实现自定义扩展 就像他们添加了muta
  • 如何避免 Java 中未使用的代码抛出 NoClassDefFoundError

    我正在从事的项目是一个支持两个不同平台的API 在运行时 类路径上实际上只有两个平台之一可用 在大多数情况下 我很容易就能编写出这样工作正常的代码 if isPlatformOne PlatformOne doSomething Even
  • Python2 和 Python3:__init__ 和 __new__

    我读过其他问题来解释两者之间的区别 init and new 但我只是不明白为什么在下面的代码中用 python 2 输出 init 和Python3 new init 示例代码 class ExampleClass def new cls
  • 在 iOS 导航栏上放置标签、按钮

    我创建了自定义导航控制器 我想添加 左侧是日期 右侧是后退按钮 后退按钮旁边是标题 我尝试添加一个标签 但不起作用 请告诉我一个方法 UINavigationBar naviBarObj UINavigationBar alloc init
  • gcc 和 g++/gcc-c++ 有什么区别?

    在我看来 gcc 可以处理 c 和 c 项目 那么为什么需要 g gcc c 呢 g 和 gcc c 有什么区别 gcc如果文件具有适当的扩展名 则将 C 源文件编译为 C 将 C 源文件编译为 C 但是它不会自动链接到 C 库中 g 将自