【Linux】Linux C 编程

在 Windows 下编程首先就是安装对应的 IDE ,然后在 IDE 里面进行代码编写和编译,但是在 Linux 下,这两个部分是分开的,比如我们可以使用 vim 编辑器编写代码,然后用 gcc 编译器编译代码。Ubuntu 下有一些可以进行编程的工具,但大多只是编辑器,只能进行代码编辑,要想编译的话就需要用到 gcc 编译器。

设置 vim 编辑器

sudo vi /etc/vim/vimrc

在这里插入图片描述

默认 TAB 键为8个空格,设置 TAB 键为4个空格;

set ts=4

默认不显示行号,设置其显示行号;

set nu

在这里插入图片描述

编写 C 程序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

编译 C 程序

gcc 编译工具在安装 Ubuntu 的时候就已经安装好了;
在这里插入图片描述
gcc 命令

gcc [选项] [文件名字]
-c  只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件;
-o  <输出文件名> 用来指定编译结束以后的输出文件名,默认编译出来的可执行文件名字为 a.out;
-g  添加调试信息,如果要使用调试工具(如 GDB)的话就必须加入此选项,此选项指示编译的时候生成调
    试所需的符号信息;
-O  对整个源代码编译、链接的的时候进行优化,这样产生的可执行文件执行效率就高;
-O2 比 -O 更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢;

在这里插入图片描述
编译错误警告
故意制造一些错误,看编译出来是什么效果;
在这里插入图片描述
在这里插入图片描述
改正错误,添加对 a、b 的定义;并补上在“ b = 4 ”后面缺少的分号,再次编译;
在这里插入图片描述
在这里插入图片描述
错误没有了,只是出现一个警告,是可以运行的,但是并没有输出 a + b 结果;
在这里插入图片描述
现在把它修改正确后再次编译;
在这里插入图片描述
在这里插入图片描述
可以看出,gcc 编译器在编译的时候,可以检查出错误和警告,并提示在哪一行,定位具体位置,方便去修改
gcc 编译器的编译流程是: 预处理、汇编、编译、链接。
预处理就是对程序中的宏定义等相关的内容先进行前期的处理;汇编是先将 C 文件转换为汇编文件,当 C 文件转换为汇编文件以后就是文件编译了;编译就是将 C 源文件编译成 .o 结尾的目标文件;编译生成的 .o 文件不能直接执行,还需要最后的链接,如果你的工程有很多个 C 源文件的话最终就会有很多 .o 文件,将这些 .o 文件链接在一起形成完整的一个可执行文件。示例的文件简单,因此可以直接使用 gcc 命令生成可执行文件,并没有先将 C 文件编译成 .o 文件,然后再链接在一起。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/520685.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Azkaban集群模式部署详细教程

序言 Azkaban是一个用于工作流程调度和任务调度的开源工具&#xff0c;它可以帮助用户轻松地管理和监控复杂的工作流程。Azkaban的架构设计旨在提供高度可扩展性和可靠性&#xff0c;同时保持易用性和灵活性。 Azkaban的架构可以分为三个主要组件:Executor、Web Server和db数据…

Python-VBA编程500例-033(入门级)

角色定位(Role Positioning)在编程中的实际应用场景主要体现在以下几个方面&#xff1a; 1、权限管理&#xff1a;在开发企业级应用或复杂的系统时&#xff0c;角色定位用于定义和管理用户的权限。例如&#xff0c;一个系统可能有管理员、普通用户、访客等不同角色&#xff0c…

Linux网络管理类命令

ping -c&#xff1a;指定次数 -i n&#xff1a;指定发送频率 n 秒 -t&#xff1a;指定 TTL 值 -s&#xff1a;指定发送包的大小 ifconfig iproute netstat -anltp ss ssh 主机名 SCP wget nmap -A: 全面扫描 -p &#xff1a;端口 80 22-80 80,25,443 -sP &#xf…

利用native的方式实现跨线程调用

简介 在OpenHarmony应用开发实践中&#xff0c;经常会遇到一些耗时的任务&#xff0c;如I/O操作、域名解析以及复杂计算等。这些任务如果直接在主线程中执行&#xff0c;将会严重阻塞主线程&#xff0c;影响后续任务的正常流程&#xff0c;进而导致用户界面响应延迟甚至卡顿。…

【学习笔记】Elsevier的Latex模板文件(附网址)

注&#xff1a;这是一篇没有技术含量的水文&#xff0c;主要是看有人下载下来&#xff0c;居然当成资源需要积分才能下载。我觉得不行&#xff0c;故提供原始下载地址供查阅使用。 链接: 上述图片所示网址&#xff1a;链接直达

Redis(性能管理、主从复制、哨兵模式)概述及部署

目录 一、性能管理 1、查看Redis内存使用 2、内存碎片率 3、跟踪内存碎片率 4、内存使用率 5、内回收key 二、Redis集群有三种模式 三、Redis主从复制 1、主从复制的概念 2、主从复制的作用 3、主从复制的流程 4、搭建Redis主从复制 1.环境准备 2.安装Redis&#…

在团队管理过程中,怎样能够让员工更容易接受和执行反馈呢?

让员工更容易接受和执行反馈&#xff0c;关键在于建立一种开放、积极且互相尊重的沟通氛围。 确保反馈的针对性和具体性是关键。 员工需要清楚了解他们的表现如何&#xff0c;以及他们需要改进的地方在哪里。因此&#xff0c;反馈内容应具体明确&#xff0c;避免模糊或笼统的表…

Python零基础到精通

Python入门指南 欢迎进入 Python 领域。作为程序员&#xff0c;我们总是在寻找能提高效率、编写优雅的代码的工具&#xff0c;而 Python 正是其中之一。你即将探索一种强大而灵活的编程语言&#xff0c;它被广泛应用于各种领域&#xff0c;从网站开发到数据科学&#xff0c;再到…

基础总结篇:Activity生命周期

private int param 1; //Activity创建时被调用 Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG, “onCreate called.”); setContentView(R.layout.lifecycle); Button btn (Button) findViewById(R.id.…

【开源语音项目OpenVoice](一)——实操演示

目录 一、前菜 1、Python选择 2、pip源切换 3、ffmpeg配置问题 4、VSCode添加Jupyter扩展 二、配置虚拟环境 1、下载源码 方法一 直接下载源码压缩包 方法二 使用git 1&#xff09;git加入鼠标右键 2&#xff09;git clone源码 2、VSCode出场 1&#xff09;创建pyth…

VC++ 错误 Compiler Error C2018 unknown character ‘hexnumber‘

如下图&#xff0c;不能识别的字符0xa1&#xff0c; 这是代码中出现了全角空格&#xff0c;如下图标识的一行&#xff0c;等号前面出现了全角空格&#xff1b;改为半角空格&#xff1b; 如果是未知字符0xa3&#xff0c;则是程序中有中文符号&#xff0c;如程序中的引号&#xf…

【C++算法竞赛 · 图论】图论基础

前言 图论基础 图的相关概念 图的定义 图的分类 按数量分类&#xff1a; 按边的类型分类&#xff1a; 边权 简单图 度 路径 连通 无向图 有向图 图的存储 方法概述 代码 复杂度 前言 图论&#xff08;Graph theory&#xff09;&#xff0c;是 OI 中的一样很大…

小米造车,特斯拉销量不满人意,马斯克坐不住了:将于8月8日推出自动驾驶出租车

在Elon Musk声称路透社关于“放弃2.5万美元低成本电动汽车计划&#xff0c;而将所有精力集中于Robotaxi&#xff08;自动驾驶出租车&#xff09;”上的报道“撒谎”仅几小时后&#xff0c;特斯拉首席执行官在X社交平台上宣布&#xff0c;他将在8月8日的活动中揭示这款所谓的Rob…

Android APP加固利器:深入了解混淆算法与混淆配置

Android APP 加固是优化 APK 安全性的一种方法&#xff0c;常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 Android APP 加固的具体实现方式。 混淆代码 使用 ipaguard工具可以对代码进行混淆&#xff0c;使得反编译出来的代码很难阅读和理解&#xff…

相对论中关于光速不变理解的补充

近几个月在物理直播间聊爱因斯坦相对论&#xff0c;发现好多人在理解爱因斯坦相对论关于基本假设&#xff0c;普遍认为光速是不变的&#xff0c;质能方程 中光速的光速不变的&#xff0c;在这里我对这个假设需要做一个补充&#xff0c;他是基于质能方程将光速C 在真是光速变化曲…

JavaEE 初阶篇-生产者与消费者模型(线程通信)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 生产者与消费者模型概述 2.0 在生产者与消费者模型中涉及的关键概念 2.1 缓冲区 2.2 生产者 2.3 消费者 2.4 同步机制 2.5 线程间通信 3.0 实现生产者与消费者模…

【Python】 小顶堆:困难 Leetcode 23. 合并 K 个升序链表 -- Python中heapq对于自定义数据类型的比较

描述 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]] 输出&#xff1a;[1,1,2,3,4,4,5,6] 代码 代码1 由于可能存在相同…

构造函数和析构函数

目录 一&#xff1a;类的六个默认函数 二&#xff1a;构造函数 2.1概念 2.2特性 三&#xff1a;析构函数 3.1概念&#xff1a; 3.2特性 一&#xff1a;类的六个默认函数 如果一个类中什都没有&#xff0c;称为空类 空类中真的什么都没有吗?并不是&#xff0c;任何类在…

MySQL客户端安装并配置免密登录

最近在写脚本时需要向MySQL数据库中存储数据&#xff0c;且脚本运行的服务器与MySQL服务器不是同一台服务器&#xff0c;而且需要保证MySQL密码的安全性&#xff0c;不能在脚本中暴露&#xff0c;所以就需要在服务器上安装MySQL客户端&#xff0c;并配置免密登录。 一、虚拟机…

C++ List 到 Python List 的转换

当我们编写 C 库的封装器通常涉及使用一种跨语言的接口技术&#xff0c;比如使用C接口或者使用特定的跨语言库&#xff0c;比如SWIG&#xff08;Simplified Wrapper and Interface Generator&#xff09;或者Pybind11。这里我将简要介绍如何使用Pybind11来封装一个C库&#xff…