当前位置: 首页 > article >正文

C语言基础系列【2】开发环境搭建

选择合适的编译器

在C语言或者C++这种编译型语言开发中,编译器是必不可少的工具。它将C语言源代码转换为机器代码,使程序能够在计算机上运行。

常见的C语言编译器包括GCC(GNU Compiler Collection,GNU编译器套件)、ClangMSVC(Microsoft Visual C++ Compiler)等,我这里推荐大家使用Clang或者MSVC编译器,下面我简单介绍如何安装和配置Clang编译器。

安装与配置Clang编译器

Clang是一个开源的编译器,功能相当强大,提供了快速、安全、可靠的编译服务。Clang支持多种编程语言,包括C、C++和Objective-C等。

很多平台的开发都用的Clang编译器,比如Android、iOS、macOS,还有强大的多平台Google浏览器,也是Clang编译器的产物。

安装Clang

  • 在Windows上安装
    • 可以通过下载并安装LLVM来安装Clang。LLVM是一个编译器工具链项目,Clang是其中的C/C++/Objective-C编译器,详见:https://llvm.org/docs/GettingStartedVS.html
    • 也可以从Microsoft Store下载并安装LLVM相关的应用程序。
  • 在macOS上安装
    • Clang通常已经预装在macOS上,可以通过命令行访问。
    • 如果需要更新或安装特定版本的Clang,可以通过下载并安装Xcode Command Line Tools来实现。
  • 在Linux上安装
    • 在大多数Linux发行版上,可以通过包管理器(如apt、yum等)来安装Clang。

配置Clang

Clang的配置通常比较简单,因为它是一个命令行工具,只需要在命令行中指定源代码文件和输出文件即可。例如,要编译一个名为hello.c的C语言源文件,可以使用以下命令:

clang hello.c -o hello

这条命令会生成一个名为hello的可执行文件。如果需要在编译过程中添加特定的编译选项,可以在命令后添加相应的选项。例如,要启用优化,可以使用-O2选项:

clang hello.c -o hello -O2

示例代码

下面是一个简单的C语言程序,用于测试Clang编译器的安装和配置是否正确:

#include <stdio.h>int main() {printf("Hello, Clang!\n");return 0;
}

将上述代码保存为hello.c文件,然后在命令行中使用Clang进行编译和运行:

clang hello.c -o hello
./hello

如果一切正常,你应该会在屏幕上看到“Hello, Clang!”的输出。

使用IDE(Visual Studio、VSCode、Clion)

集成开发环境(IDE)是一种集成了代码编辑器、编译器、调试器等工具的软件环境,可以大大提高开发效率。

有许多优秀的IDE可供选择,包括Visual Studio、VSCode(Visual Studio Code)和Clion等。

Visual Studio

Visual Studio是微软开发的一款功能强大的IDE,支持多种编程语言,包括C/C++。它提供了丰富的调试工具、代码分析工具、项目管理工具等,非常适合大型项目的开发。

可以这样说,Windows平台如果要开发C语言或者C++,一定要安装Visual Studio,因为它不只是个IDE,通过Visual Studio,可以安装很多必要的开发环境套件。

安装与配置

  • 下载并安装最新版本的Visual Studio。https://visualstudio.microsoft.com/zh-hans/vs/community/
  • 在安装过程中,选择“Desktop development with C++”,这将安装C/C++编译器和相关的开发工具。
  • 安装完成后,打开Visual Studio并创建一个新的C/C++项目,然后编写和编译代码。

VSCode(个人常用)

VSCode也是微软开发的,它是一款轻量级的、跨平台的IDE,支持多种编程语言,其中包括C/C++。它提供了丰富的扩展和插件,可以方便地定制开发环境。

安装与配置

  • 下载并安装最新版本的VSCode。https://code.visualstudio.com/
  • 在VSCode中安装C/C++扩展(由Microsoft提供)。
  • 配置编译任务。可以通过在.vscode文件夹中创建tasks.json文件来定义编译任务。
  • 配置调试器。可以通过在.vscode文件夹中创建launch.json文件来配置调试器。
  • 编写代码,并使用快捷键或命令面板中的命令来编译和调试代码。

Clion

Clion是JetBrains开发的一款专门用于C/C++开发的IDE。它提供了强大的代码分析和重构工具、智能代码补全、跨平台支持等功能。

安装与配置

  • 下载并安装最新版本的Clion。
  • 在安装过程中,选择适当的编译器(如GCC、Clang等)进行配置。
  • 打开Clion并创建一个新的C/C++项目,然后编写和编译代码。

示例代码

无论是在Visual Studio、VSCode还是Clion中,我们都可以使用以下简单的C语言程序来测试IDE的配置是否正确:

#include <stdio.h>int main() {printf("Hello, IDE!\n");return 0;
}

在IDE中编写上述代码,然后按照各自的编译和运行步骤来测试程序的输出。如果一切正常,你应该会在屏幕上看到“Hello, IDE!”的输出。

作者介绍

程序喵大人

  • 35- 资深C/C++/Rust/Android/iOS客户端开发
  • 10年大厂工作经验
  • 嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手
  • 《C++20高级编程》《C++23高级编程》等多本书籍著译者

C++训练营

专为校招、社招3年工作经验的同学打造的1V1 C++训练营,量身定制学习计划、每日代码review,简历优化,面试辅导,一条龙服务,已帮助多名学员获得offer!训练营介绍

相关文章:

C语言基础系列【2】开发环境搭建

选择合适的编译器 在C语言或者C这种编译型语言开发中&#xff0c;编译器是必不可少的工具。它将C语言源代码转换为机器代码&#xff0c;使程序能够在计算机上运行。 常见的C语言编译器包括GCC&#xff08;GNU Compiler Collection&#xff0c;GNU编译器套件&#xff09;、Cla…...

vs 编译错误 error C4996

编译出错&#xff1a;error C4996: Json::Reader::Reader: Use CharReader and CharReaderBuilder instead : 参见“Json::Reader::Reader”的声明 新版本已经标志Json::Reader::Reader为废弃接口&#xff0c;编译情况下可能会出错提示&#xff0c;根据编译器的不同&#xff…...

扣子平台的选择器节点:让智能体开发更简单,扣子免费系列教程(17)

欢迎来到涛涛聊AI。今天&#xff0c;我们来聊聊一个非常实用的工具——扣子平台的选择器节点。即使你不是计算机专业人员&#xff0c;但对计算机操作比较熟悉&#xff0c;这篇文章也能帮你快速上手。我们会从基础知识讲起&#xff0c;一步步带你了解选择器节点的使用方法和应用…...

使用Nuxt.js实现服务端渲染(SSR):提升SEO与性能的完整指南

使用Nuxt.js实现服务端渲染&#xff08;SSR&#xff09;&#xff1a;提升SEO与性能的完整指南 使用Nuxt.js实现服务端渲染&#xff08;SSR&#xff09;&#xff1a;提升SEO与性能的完整指南1. 服务端渲染&#xff08;SSR&#xff09;核心概念1.1 CSR vs SSR vs SSG1.2 SSR工作原…...

java 进阶教程_Java进阶教程 第2版

第2版前言 第1版前言 语言基础篇 第1章 Java语言概述 1.1 Java语言简介 1.1.1 Java语言的发展历程 1.1.2 Java的版本历史 1.1.3 Java语言与C&#xff0f;C 1.1.4 Java的特点 1.2 JDK和Java开发环境及工作原理 1.2.1 JDK 1.2.2 Java开发环境 1.2.3 Java工作原理 1.…...

shell编程(2)——shell脚本执行、传参、变量定义、注释

1、执行shell脚本 执行方式举例shsh xx.shsourcesource xx.sh点号.. xx.sh直接使用命令解释器bash xx.sh使用绝对路径或者相对路径./xx.sh daizhixin:shell$ sh test.sh hell0 world! daizhixin:shell$ source test.sh hell0 world! daizhixin:shell$ . test.sh hell0 wor…...

享元模式——C++实现

目录 1. 享元模式简介 2. 代码示例 1. 享元模式简介 享元模式是一种结构型模式。 享元模式用于缓存共享对象&#xff0c;降低内存消耗。共享对象相同的部分&#xff0c;避免创建大量相同的对象&#xff0c;减少内存占用。 享元模式需要将对象分成内部状态和外部状态两个部分…...

c++ Base64编码

介绍 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一&#xff0c;Base64就是一种基于64个可打印字符来表示二进制数据的方法。 需要注意的是&#xff1a;标准的Base64并不适合直接放在URL里传输&#xff0c;因为URL编码器会把标准Base64中的“/”和“”字符变为形如“…...

SSRF 漏洞利用 Redis 实战全解析:原理、攻击与防范

目录 前言 SSRF 漏洞深度剖析 Redis&#xff1a;强大的内存数据库 Redis 产生漏洞的原因 SSRF 漏洞利用 Redis 实战步骤 准备环境 下载安装 Redis 配置漏洞环境 启动 Redis 攻击机远程连接 Redis 利用 Redis 写 Webshell 防范措施 前言 在网络安全领域&#xff0…...

react的antd表格自定义图标

将原版的加号换成箭头 自定义图标 安装图标包&#xff1a; npm install --save ant-design/icons 引入&#xff1a; import { RightOutlined, DownOutlined } from ant-design/icons; 参数是一个函数 <Table columns{columns} dataSource{data} indentSize{20}expandIc…...

Games104——游戏引擎Gameplay玩法系统:基础AI

这里写目录标题 寻路/导航系统NavigationWalkable AreaWaypoint NetworkGridNavigation Mesh&#xff08;寻路网格&#xff09;Sparse Voxel Octree Path FindingDijkstra Algorithm迪杰斯特拉算法A Star&#xff08;A*算法&#xff09; Path Smoothing Steering系统Crowd Simu…...

Java 2024年面试总结(持续更新)

目录 最近趁着金三银四面了五六家公司吧&#xff0c;也整理了一些问题供大家参考一下&#xff08;适合经验三年左右的&#xff09;。 面试问题&#xff08;答案是我自己总结的&#xff0c;不一定正确&#xff09;&#xff1a; 总结&#xff1a; 最近趁着金三银四面了五六家公…...

亚博microros小车-原生ubuntu支持系列:22 物体识别追踪

背景知识 跟上一个颜色追踪类似。也是基于opencv的&#xff0c;不过背后的算法有很多 BOOSTING&#xff1a;算法原理类似于Haar cascades (AdaBoost)&#xff0c;是一种很老的算法。这个算法速度慢并且不是很准。MIL&#xff1a;比BOOSTING准一点。KCF&#xff1a;速度比BOOST…...

JAVA异步的TCP 通讯-客户端

一、客户端代码示例 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.AsynchronousSocketChannel; import java.nio.channels.CompletionHandler; import java.util.concurrent.ExecutorService; impo…...

python:递归函数与lambda函数

递归函数&#xff1a;1.函数内调用自己 2.有一个出口 1.递归 一.有出口时 def sum(num):if num1:return 1return numsum(num-1) asum(3) print(a) #num3 3sum(2) #num2 2sum(1) #num1是返回1 #即3sum(2&#xff09;即32sum(1)即321运行结果 6 二.无出口时 def sum(num)…...

G1相对于CMS的的优势

1.G1在压缩空间方面有优势。 2.G1通过将内存空间分成区域&#xff08;Region&#xff09;的方式避免内存碎片问题 3.Eden、Survivor、Old区不再固定&#xff0c;在内存使用率上来说更灵活 4.G1可以通过设置预期停顿时间&#xff08;Pause Time&#xff09;来控制垃圾收集时间…...

java进阶之并发编程一ReentrantLock的实际应用和线程中断EXAMPLE

引言:继上一篇ReentrantLock的介绍来做俩个小demo。 实现3个线程分别打印指定数字和线程死锁进行线程中断。 上一篇:<<java进阶之并发编程一ReentrantLock同步锁的学习和syncthronized的区别>> **demo1:**ReentrantLock搭配三个线程分别打印指定的数字,直接上代…...

消费kafka消息示例

以下是使用 Java 结合 Spring Kafka 框架来监听 updated-topic-test 这个 Kafka Topic 的详细实现步骤及代码示例&#xff0c;用于捕获人员信息变更的事件。 1. 添加依赖 在 pom.xml 文件中添加 Spring Kafka 相关依赖&#xff1a; <dependencies><!-- Spring Boot…...

分享2款 .NET 开源且强大的翻译工具

前言 对于程序员而言永远都无法逃避和英文打交道&#xff0c;今天大姚给大家分享2款 .NET 开源、功能强大的翻译工具&#xff0c;希望可以帮助到有需要的同学。 STranslate STranslate是一款由WPF开源的、免费的&#xff08;MIT License&#xff09;、即开即用、即用即走的翻…...

SpringBoot+Dubbo+zookeeper 急速入门案例

项目目录结构&#xff1a; 第一步&#xff1a;创建一个SpringBoot项目&#xff0c;这里选择Maven项目或者Spring Initializer都可以&#xff0c;这里创建了一个Maven项目&#xff08;SpringBoot-Dubbo&#xff09;&#xff0c;pom.xml文件如下&#xff1a; <?xml versio…...

Java 面试之结束问答

技术优化 线程池优化 设置最大线程数设置最小核心线程数设置额外线程存活时间选择线程池队列选择合适的线程池选择合适的饱和策略 锁优化 尽量不要锁住方法缩小同步代码块&#xff0c;只锁数据锁中尽量不要再包含锁将锁私有化&#xff0c;在内部管理锁进行适当的锁分解 HT…...

[LeetCode] 二叉树 I — 深度优先遍历(前中后序遍历) | 广度优先遍历(层序遍历):递归法迭代法

二叉树 基础知识深度优先遍历递归法迭代法&#xff08;栈&#xff09;144# 二叉树的前序遍历94# 二叉树的中序遍历145# 二叉树的后序遍历 广度优先遍历递归法迭代法&#xff08;队列&#xff09;102# 二叉树的层序遍历107# 二叉树的层序遍历 II199# 二叉树的右视图637# 二叉树的…...

主动管理的基本概念

什么是主动管理&#xff1f; 主动管理&#xff0c;又称主动投资&#xff0c;是一种投资策略&#xff0c;投资组合经理进行特定投资的目的是超越投资基准指数。与被动管理不同&#xff0c;主动管理者依靠分析研究、预测以及自己的判断和经验来决定买入、持有和卖出哪些证券。“…...

Python aiortc API

本研究的主要目的是基于Python aiortc api实现抓取本地设备&#xff08;摄像机、麦克风&#xff09;媒体流实现Web端预览。本文章仅仅描述实现思路&#xff0c;索要源码请私信我。 demo-server解耦 原始代码解析 http服务器端 import argparse import asyncio import json…...

OpenCV4,快速入门,第二讲:图像色彩空间转换

文章目录 引言一、色彩空间概述1.1 RGB与HSV的区别1.2 HSV的详细含义cvtColor二、cvtColor函数详解2.1 函数原型2.2 参数说明2.3 使用示例三、imwrite函数详解3.1 函数原型3.2 参数说明3.3 使用示例四、完整示例代码五、应用场景与注意事项5.1 HSV的典型应用5.2 注意事项结语引…...

86.(2)攻防世界 WEB PHP2

之前做过&#xff0c;回顾一遍&#xff0c;详解见下面这篇博客 29.攻防世界PHP2-CSDN博客 既然是代码审计题目&#xff0c;打开后又不显示代码&#xff0c;肯定在文件里 <?php // 首先检查通过 GET 请求传递的名为 "id" 的参数值是否严格等于字符串 "admi…...

【Leetcode 每日一题】90. 子集 II

问题背景 给你一个整数数组 n u m s nums nums&#xff0c;其中可能包含重复元素&#xff0c;请你返回该数组所有可能的 子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。返回的解集中&#xff0c;子集可以按 任意顺序 排列。 数据约束 ● 1 ≤ n u m s . …...

RK3588——解决Linux系统触摸屏坐标方向相反问题

问题描述&#xff1a;触摸正常产生中断&#xff0c;但系统上报的触摸坐标不正确&#xff0c;是反向的坐标。 解决办法通过修改设备树添加属性翻转坐标。 注&#xff1a;需确认对应的驱动是否有解析该属性的具体内容&#xff0c;否则仍然无法生效。...

面对全球化的泼天流量,出海企业如何观测多地域网络质量?

作者&#xff1a;俞嵩、白玙 泼天富贵背后&#xff0c;技术挑战接踵而至 随着全球化进程&#xff0c;出海、全球化成为很多 Toc 产品的必经之路&#xff0c;保障不同地域、不同网络环境的一致的用户体验成为全球化应用的不得不面对的问题。在跨运营商、跨地域的网络环境中&am…...

YOLOv11实时目标检测 | 摄像头视频图片文件检测

在上篇文章中YOLO11环境部署 || 从检测到训练https://blog.csdn.net/2301_79442295/article/details/145414103#comments_36164492&#xff0c;我们详细探讨了YOLO11的部署以及推理训练&#xff0c;但是评论区的观众老爷就说了&#xff1a;“博主博主&#xff0c;你这个只能推理…...