news 2026/4/23 14:35:20

gcc/g++

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
gcc/g++

gcc(GNU C Compiler)是针对 C 语言的编译器,g++(GNU C++ Compiler)是针对 C++ 语言的编译器,二者都属于 GNU 编译器套件(GCC),是 Linux/macOS 系统下最常用的编译工具,Windows 也可通过 MinGW/WSL 使用。


一、核心区别(新手必看)

特性gccg++
编译语言主要编译 C 语言主要编译 C++ 语言
链接库默认只链接 C 标准库(libc)默认链接 C++ 标准库(libstdc++)
处理后缀.c 按 C 编译,.cpp 按 C++ 编译所有后缀(.c/.cpp)都按 C++ 编译

简单说:编译 C 程序用gcc,编译 C++ 程序用g++,避免链接库缺失导致的报错。

二、基础使用步骤(以 Linux 为例)

1. 检查是否安装

bash

运行

gcc --version # 查看gcc版本 g++ --version # 查看g++版本

若未安装,Ubuntu/Debian 系统可安装:

bash

运行

sudo apt update sudo apt install gcc g++ # 安装最新版
2. 编译单个文件(最常用)
示例 1:编译 C 程序(test.c)

c

运行

// test.c #include <stdio.h> int main() { printf("Hello GCC!\n"); return 0; }

编译运行命令:

bash

运行

gcc test.c -o test # -o 指定输出可执行文件名为test ./test # 运行程序,输出:Hello GCC!
示例 2:编译 C++ 程序(test.cpp)

cpp

运行

// test.cpp #include <iostream> using namespace std; int main() { cout << "Hello G++!" << endl; return 0; }

编译运行命令:

bash

运行

g++ test.cpp -o test # 必须用g++,否则会缺失C++库链接 ./test # 运行程序,输出:Hello G++!
3. 常用编译参数(新手高频)
参数作用示例
-o指定输出文件名(必用)gcc a.c -o myapp
-Wall显示所有警告信息(调试必备)g++ b.cpp -o b -Wall
-g生成调试信息(可用于 gdb 调试)gcc c.c -o c -g
-O2开启优化(提升运行效率,发布版用)g++ d.cpp -o d -O2
-std=c++11指定 C++ 标准(如 C++11/17)g++ e.cpp -o e -std=c++11

三、编译多个文件(实战场景)

若项目有多个源文件(如main.cpp+utils.cpp),编译命令:

bash

运行

# 方式1:直接编译所有文件 g++ main.cpp utils.cpp -o myapp -Wall -std=c++11 # 方式2:分步编译(适合大项目,修改单个文件无需重新编译所有) g++ -c main.cpp -o main.o -Wall # -c 只编译不链接,生成目标文件.o g++ -c utils.cpp -o utils.o -Wall g++ main.o utils.o -o myapp # 链接所有.o文件生成可执行程序

四、Windows 下使用 gcc/g++

Windows 无默认 gcc/g++,推荐两种方式:

  1. MinGW:下载 MinGW-w64,配置环境变量后,在 CMD/PowerShell 中使用gcc/g++命令,用法和 Linux 一致。
  2. WSL(Windows Subsystem for Linux):安装 Ubuntu 子系统,直接使用 Linux 的 gcc/g++,体验最接近原生。

总结

  1. gcc对应 C 语言,g++对应 C++ 语言,编译 C++ 程序优先用g++避免库链接问题。
  2. 核心编译流程:编译器 源文件 -o 输出文件-Wall(看警告)和-g(调试)是新手必备参数。
  3. 多文件编译可分步生成.o目标文件,再链接,提升开发效率。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:31:52

计算机毕设项目之基于Springboot vue的社区养老服务小程序

获取源码 基于Springboot vue的社区养老服务小程序 一、精准定位两类核心用户 平台围绕两类目标用户的需求进行功能设计&#xff0c;实现管理端与用户端的高效协同&#xff1a; 管理员&#xff1a;作为平台的运营核心&#xff0c;承担内容发布、用户与服务管理、订单与缴费管…

作者头像 李华
网站建设 2026/4/23 11:29:04

基于Python的购物管理系统毕设源码+文档+讲解视频

前言 随着中小商户数字化经营需求提升&#xff0c;传统购物管理模式存在商品台账混乱、订单统计繁琐、库存监控不及时、数据追溯困难等问题&#xff0c;难以满足商户高效运营与精准管理的需求。本课题旨在设计并实现基于Python的购物管理系统&#xff0c;依托Python语言简洁高效…

作者头像 李华
网站建设 2026/4/23 11:29:42

Java面试:为何必须在循环中检查等待条件?避坑指南!

文章目录Java面试&#xff1a;为何必须在循环中检查等待条件&#xff1f;避坑指南&#xff01;1. 循环与等待条件&#xff1a;一场“守门人”的游戏代码示例&#xff1a;2. 循环中的等待条件&#xff1a;为什么要检查&#xff1f;2.1 线程调度的问题2.2 性能与资源浪费代码示例…

作者头像 李华
网站建设 2026/4/23 11:34:24

Spring HATEOAS 详细介绍

让我用一个餐厅点餐的类比来帮你理解 HATEOAS 和 Spring HATEOAS。一、先理解 HATEOAS 的核心思想场景&#xff1a;在餐厅点餐传统 API&#xff08;没有 HATEOAS&#xff09;&#xff1a;你去餐厅&#xff0c;服务员给你一份菜单你必须知道要喊&#xff1a;"服务员&#x…

作者头像 李华
网站建设 2026/4/23 11:30:01

Qt 中将 QWidget 改为模态的方法

方法1&#xff1a;使用 setWindowModality()// 设置为应用程序模态&#xff08;阻止与所有窗口交互&#xff09; widget->setWindowModality(Qt::ApplicationModal);// 设置为窗口模态&#xff08;只阻止与父窗口交互&#xff09; widget->setWindowModality(Qt::WindowM…

作者头像 李华
网站建设 2026/4/17 17:06:50

ModelEngine测评——Aido在线Agent应用创建测试

前言 这两天测试了一下 ModelEngine 创建AIAgent的效率与速度都还不错&#xff0c;我这里留几篇示例文章&#xff0c;跟大家描述一下具体的使用方法&#xff0c;这里我建议使用Aido的方式来创建&#xff0c;虽然可选择的模型不多&#xff0c;但是够用了呢。 主页地址&#xf…

作者头像 李华