Linux GCC基础用法⑦
在 CentOS 7 系统中使用 GCC 与编写 99 乘法表
一、GCC 简介
GCC(GNU Compiler Collection)是一套功能强大的编程语言编译器,在 CentOS 7 系统中广泛用于编译 C、C++等多种编程语言的程序。它能够将源代码转换为可执行文件,让计算机可以直接运行程序。
二、安装 GCC
在 CentOS 7 系统中,如果尚未安装 GCC,可以通过以下命令使用 yum 包管理器进行安装:
yum install gcc
解释:yum
是 CentOS 系统中用于软件包管理的工具,install
是安装操作,gcc
则是我们要安装的软件包名称。执行此命令后,系统会自动从 CentOS 的软件源下载并安装 GCC 及其相关依赖。
以下是在 CentOS 7 系统中使用 GCC 编写并运行最简单的 “Hello, world!” 程序的完整步骤,适合放在博客中展示:
一、编写源代码
- 首先,打开终端,使用文本编辑器(这里以
vi
为例,你也可以选择nano
等其他编辑器)创建一个名为hello.c
的文件,在终端输入以下命令:
vi hello.c
此时进入 vi
编辑器的命令模式。
- 按下
i
键进入插入模式,然后输入以下 C 语言代码:
#include <stdio.h>int main() {printf("Hello, world!\n");return 0;
}
代码解释如下:
- #include <stdio.h>
:这一行是引入标准输入输出头文件。在 C 语言中,要使用像 printf
这样的标准输入输出函数,就需要包含这个头文件,它为我们提供了相应函数的声明等信息。
- int main()
:这是 C 语言程序的主函数,是整个程序的入口点,程序从这里开始执行。
- printf("Hello, world!\n");
:printf
是一个用于输出信息到标准输出(通常就是终端屏幕)的函数,这里它会输出字符串 "Hello, world!"
,\n
表示换行符,使得输出完信息后进行换行操作。
- return 0;
:在 main
函数的末尾,return
语句用于返回一个整数值给操作系统,表示程序的结束状态。通常返回 0
表示程序正常结束。
- 编写完代码后,按下
Esc
键回到命令模式,然后输入:wq
保存文件并退出vi
编辑器。
二、使用 GCC 编译程序
在包含 hello.c
文件的目录下(可以通过 pwd
命令查看当前所在目录),使用以下 GCC 命令进行编译:
gcc hello.c -o hello
解释:
- gcc
是编译器命令,用于调用 GCC 编译器来处理我们的源文件。
- hello.c
是要编译的源文件名称,也就是我们刚刚编写的包含 “Hello, world!” 代码的那个文件。
- -o
选项用于指定输出文件的名称,这里我们将生成的可执行文件命名为 hello
。如果省略 -o
选项,默认会生成一个名为 a.out
的可执行文件。
三、运行程序
- 检查执行权限
编译后生成的可执行文件hello
,默认情况下可能没有执行权限。可以通过ls -l
命令查看其权限信息,像这样:
ls -l hello
输出结果可能类似如下形式(权限部分示例):
-rw-r--r--. 1 user user 8528 Dec 11 12:00 hello
这里开头的 -rw-r--r--
表示文件的权限,第一个字符 -
表明这是一个普通文件,后面三组 rwx
(这里是 rw-
、r--
、r--
)分别对应文件所有者、所属组以及其他用户的读(r
)、写(w
)、执行(x
)权限。可以看到当前示例中并没有执行权限(x
)标志,所以需要添加执行权限才能顺利运行这个文件。
- 添加执行权限
使用chmod
命令来为文件添加执行权限,有以下两种常用方式:- 使用数字形式修改权限:
命令格式为chmod [数字权限值] [文件名]
,数字权限值是通过将所有者、所属组、其他用户的权限对应的数字相加得到的。r
(读权限)对应数字4
,w
(写权限)对应数字2
,x
(执行权限)对应数字1
。比如要给所有者、所属组、其他用户都添加执行权限,对应的权限值就是755
(所有者rwx
即4 + 2 + 1 = 7
,所属组r-x
即4 + 0 + 1 = 5
,其他用户r-x
即4 + 0 + 1 = 5
),命令如下:
- 使用数字形式修改权限:
chmod 755 hello
- **使用符号形式修改权限**:
命令格式为 chmod [用户类型][操作符号][权限字符] [文件名]
,例如给所有者添加执行权限,可以这样操作:
chmod u+x hello
这里 u
表示所有者(user
),+
是添加权限的操作符号,x
表示执行权限。
- 运行可执行文件
在确保文件有了执行权限后,就可以在终端中通过以下方式运行它(假设当前所在目录就是包含hello
文件的目录,如果不在该目录,需要先切换到相应目录):
./hello
解释:./
表示当前目录,这是因为 Linux 系统在查找可执行文件时,默认不会在当前目录查找(出于安全等考虑),所以需要明确指定当前目录下的可执行文件来运行。运行上述命令后,你就能在终端看到输出的 "Hello, world!"
字符串了。
三、使用 vi 编写 99 乘法表程序
- 打开终端,输入
vi multitable.c
命令创建并打开一个名为multitable.c
的文件。此时进入 vi 编辑器的命令模式。 - 按下
i
键进入插入模式,开始编写代码:
#include <stdio.h>int main() {int i, j;for (i = 1; i <= 9; i++) {for (j = 1; j <= i; j++) {// 输出乘法表达式和结果,%d 表示整数占位符printf("%d x %d = %d\t", j, i, i * j);}// 换行,用于输出下一行乘法表printf("\n");}return 0;
}
解释:
- #include <stdio.h>
:引入标准输入输出头文件,这样我们就可以使用printf
函数进行输出。
- int main()
:程序的主函数,是程序的入口点。
- int i, j;
:定义两个整型变量i
和j
,用于循环计数。
- 外层for
循环for (i = 1; i <= 9; i++)
:控制乘法表的行数,从 1 到 9。
- 内层for
循环for (j = 1; j <= i; j++)
:控制每行乘法表的列数,列数与当前行数相等。例如,当i = 3
时,内层循环会执行 3 次,输出 1 x 3 = 3、2 x 3 = 6、3 x 3 = 9。
- printf("%d x %d = %d\t", j, i, i * j);
:按照指定格式输出乘法表达式和结果,\t
表示制表符,用于对齐输出。
- printf("\n");
:在内层循环结束后换行,准备输出下一行乘法表。
3. 编写完代码后,按下Esc
键回到命令模式,输入:wq
保存文件并退出 vi 编辑器。
四、使用 GCC 编译 99 乘法表程序
在包含multitable.c
文件的目录下,使用以下命令进行编译:
gcc multitable.c -o multitable
解释:gcc
是编译器命令,multitable.c
是要编译的源文件,-o
选项用于指定输出文件的名称,这里将生成的可执行文件命名为multitable
。
五、运行程序
- 权限相关说明:在 Linux 系统(包括 CentOS 7)中,默认情况下新生成的可执行文件可能没有执行权限。可以通过
ls -l
命令查看文件的详细信息,例如对编译后的multitable
文件查看权限信息:
ls -l multitable
输出结果可能类似如下形式(权限部分示例):
-rw-r--r--. 1 user user 8528 Dec 11 12:00 multitable
其中开头的-rw-r--r--
表示文件的权限,第一个字符-
说明这是一个普通文件,后面的三组rwx
(这里是rw-
、r--
、r--
)分别对应文件所有者、所属组以及其他用户的读(r
)、写(w
)、执行(x
)权限。可以看到当前示例中并没有执行权限(x
)标志,所以需要添加执行权限才能运行这个文件。
2. 添加执行权限:使用chmod
命令来为文件添加执行权限,常用的方式有以下两种:
- 使用数字形式修改权限:
命令格式为chmod [数字权限值] [文件名]
,数字权限值是通过将所有者、所属组、其他用户的权限对应的数字相加得到的。r
(读权限)对应数字4
,w
(写权限)对应数字2
,x
(执行权限)对应数字1
。比如要给所有者、所属组、其他用户都添加执行权限,对应的权限值就是755
(所有者rwx
即4 + 2 + 1 = 7
,所属组r-x
即4 + 0 + 1 = 5
,其他用户r-x
即4 + 0 + 1 = 5
),命令如下:
chmod 755 multitable
- **使用符号形式修改权限**:
命令格式为chmod [用户类型][操作符号][权限字符] [文件名]
,例如给所有者添加执行权限,可以这样操作:
chmod u+x multitable
这里u
表示所有者(user
),+
是添加权限的操作符号,x
表示执行权限。
3. 运行可执行文件:在确保文件有了执行权限后,就可以在终端中通过以下方式运行它(假设当前所在目录就是包含multitable
文件的目录,如果不在该目录,需要先切换到相应目录):
./multitable
解释:./
表示当前目录,这是因为 Linux 系统在查找可执行文件时,默认不会在当前目录查找(出于安全等考虑),所以需要明确指定当前目录下的可执行文件来运行。这样操作后,就可以看到终端中输出了我们期望的99
乘法表内容了,如下所示:
1 x 1 = 1
1 x 2 = 2 2 x 2 = 4
1 x 3 = 3 2 x 3 = 6 3 x 3 = 9
1 x 4 = 4 2 x 4 = 8 3 x 4 = 12 4 x 4 = 16
1 x 5 = 5 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25
1 x 6 = 6 2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 6 x 6 = 36
1 x 7 = 7 2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 7 x 7 = 49
1 x 8 = 8 2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40 6 x 8 = 48 7 x 8 = 56 8 x 8 = 64
1 x 9 = 9 2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45 6 x 9 = 54 7 x 9 = 63 8 x 9 = 72 9 x 9 = 81
相关文章:
Linux GCC基础用法⑦
在 CentOS 7 系统中使用 GCC 与编写 99 乘法表 一、GCC 简介 GCC(GNU Compiler Collection)是一套功能强大的编程语言编译器,在 CentOS 7 系统中广泛用于编译 C、C等多种编程语言的程序。它能够将源代码转换为可执行文件,让计算…...
PyTorch 切片运算 (Slice Operator)
PyTorch 切片运算 {Slice Operator} 1. [:, -1, :]2. [:, [-1], :]References 1. [:, -1, :] https://github.com/karpathy/llama2.c/blob/master/model.py import torchlogits torch.arange(1, 16) print("logits.shape:", logits.shape) print("logits:\n&…...
SpringSecurity Oauth2 -账号密码实现多因子身份认证
1. 密码策略问题 CREATE TABLE t_storage (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 自增主键,nameSpace varchar(64) NOT NULL COMMENT 隔离字段,groupId varchar(128) NOT NULL COMMENT 分组,比如不同app,dataId varchar(64) NOT NULL COMMENT 数据存储id…...
【CSS in Depth 2 精译_071】11.4 思考字体颜色的对比效果 + 11.5 本章小结
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 11.1.1 模式的建立11.1.2 还原设计稿 11.2 颜色的定义 11.2.1 色域与色彩空间11.2.2 CSS 颜色表示法 11.2.2.1 RGB…...
Y3编辑器文档4:触发器1(对话、装备、特效、行为树、排行榜、不同步问题)
文章目录 一、触发器简介1.1 触发器界面1.2 ECA语句编辑及快捷键1.3 参数设置1.4 变量设置1.5 实体触发器1.6 函数库与触发器复用 二、触发器的多层结构2.1 子触发器(在游戏内对新的事件进行注册)2.2 触发器变量作用域2.3 复合条件2.4 循环2.5 计时器2.6…...
趣味编程:猜拳小游戏
1.简介 这个系列的第一篇以猜拳小游戏开始,这是源于我们生活的灵感,在忙碌的时代中,我们每个人都在为自己的生活各自忙碌着,奔赴着自己所走向的那条路上,即使遍体鳞伤。 但是,生活虽然很苦,也不…...
软件工程 概述
软件 不仅仅是一个程序代码。程序是一个可执行的代码,它提供了一些计算的目的。 软件被认为是集合可执行的程序代码,相关库和文档的软件。当满足一个特定的要求,就被称为软件产品。 工程 是所有有关开发的产品,使用良好定义的&…...
CountDownLatch阻塞后countDown未执行会如何?
背景 某项目封装了 Kafka 消费者 API,根据传递的消费者线程数,创建 N 个消费者线程同时消费对应 topic 的数据,并在线程启动后收集到全局列表中,方便在程序调用 stop 流程时逐个停止。 主控类在创建 Kafka 消费线程时使用了 Cou…...
k8s,operator
相对更加灵活和编程友好的管理“有状态应用”的解决方案,它就是:Operator 会议一下有状态应用: 比如数据库集群,数据挂载需要有顺序维护拓扑关系的应用 使用statefulSet这个对象来描述。 CRD又是什么? Operator的工作…...
使用 pyperclip 进行跨平台剪贴板操作
简介:pyperclip 是一个轻量级的 Python 库,支持在不同操作系统(Windows、macOS、Linux)中进行剪贴板的复制和粘贴。这个库的设计简单易用,非常适合需要频繁进行文本复制粘贴操作的场景。 历史攻略: 使用f…...
20 设计模式之职责链模式(问题处理案例)
一、什么是职责链模式 职责链模式是一种行为型设计模式,它允许将请求沿着处理者的链进行传递,直到有一个处理者能够处理它为止。换句话说,它将请求的发送者和接收者解耦,使得多个对象都有机会处理这个请求,从而避免了将…...
SpringBoot3集成MybatisPlus3和knife4j(swagger3兼容增强版)
针对Swagger2规范和OpenAPI3规范的说明: 在Spring Boot框架中,Knife4j对于服务端将Spring的开放接口解析成Swagger2或者OpenAPI3规范的框架,也是依赖的第三方框架组件。说明如下: Swagger2规范:依赖Springfox项目,该项目目前几乎处于停更状态,但很多老项目依然使用的是该…...
【MIT-OS6.S081作业1.3】Lab1-utilities primes
本文记录MIT-OS6.S081 Lab1 utilities 的primes函数的实现过程 文章目录 1. 作业要求primes (moderate)/(hard) 2. 实现过程2.1 代码实现 1. 作业要求 primes (moderate)/(hard) Write a concurrent version of prime sieve using pipes. This idea is due to Doug McIlroy, in…...
游戏引擎学习第35天
开场介绍 今天的任务是继续改进一个虚拟的瓦片地图系统,使其适合处理更大的世界。我们希望这个系统能管理大范围的游戏世界,其中包含按需存储的小区域。昨天,我们介绍了“内存区域”的概念,用于管理持久性存储。我们计划今天继续…...
learn-(Uni-app)输入框u-search父子组件与input输入框(防抖与搜索触发)
1.父子组件u-search (1)父组件 <!-- 父组件 --> <template> <div><searchBar change"change" search"search"></searchBar> </div> </template> <script> // 子组件搜索 import…...
设置IMX6ULL开发板的网卡IP的两种方法(临时生效和永久有效两种方法)
设置开发板网卡的IP,有两种方法。 方法一:临时生效 第一种方式是临时设置,只有本次有效,重启后又要重新设,命令为: ifconfig eth0 192.168.5.9设置成功后可以使用ifconfig命令来查看已设置的 IP 地址。 …...
流量转发利器之Burpsuite概述(1)
目录 一、Burpsuite Burp Suite Spider 的主要特点: 在 Burp Suite 中使用 Spider: Spider 的用例: 限制: 声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 声明:本文主要用作技…...
Transformer入门(6)Transformer编码器的前馈网络、加法和归一化模块
文章目录 7.前馈网络8.加法和归一化组件9.组合所有编码器组件构成完整编码器 7.前馈网络 编码器块中的前馈网络子层如下图所示: 图1.32 – 编码器块 前馈网络由两个带有ReLU激活函数的全连接层组成。全连接层(Fully Connected Layer)有时也…...
element-plus中的resetFields()方法
resetFields()确实是Element Plus中的方法,该方法主要用于重置表单,将其值重置为初始值,并移除校验结果。以下是对该方法的详细解释: 一、resetFields方法的作用 在Vue3结合Element Plus开发时࿰…...
【过滤器】.NET开源 ORM 框架 SqlSugar 系列
目录 0、 过滤器介绍 1、表过滤器 (推荐) 1.1 手动添加过滤器 1.2 禁用、清空、备份和还原 1.3 联表查询设置 1.4 动态添加 2、修改和删除用过滤器 2.1 局部设置 2.2 全局设置 (5.1.4.62) 3、子查询用过滤器 4、联表过滤…...
Jmeter Address already in use: connect 解决
做压测接口时,并发一段时间后,会报java.net.BindException: Address already in use: connect 原因: windows提供给TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收它们,就导致在短时间内跑大量的请求时将端口占…...
C#常见错误—空对象错误
System.NullReferenceException:未将对象引用设置到对象的实例 在C#编程中,System.NullReferenceException是一个常见的运行时异常,其错误信息“未将对象引用设置到对象的实例”意味着代码试图访问一个未被初始化或已被设置为null的对象的成…...
Leetcode数学部分笔记
Leetcode数学部分笔记 1. 回文数2. 加一3. 阶乘后的零4. x 的平方根5. Pow(x, n) 1. 回文数 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数 是指正序(从左向右)和倒序&…...
微信小程序web-view 嵌套h5界面 实现文件预览效果
实现方法:(这里我是在小程序里面单独加了一个页面用来下载预览文件) 安装 使用方法请参考文档 npm 安装 npm install weixin-js-sdk import wx from weixin-js-sdk预览 h5界面代码 <u-button click"onclick" type"primary" :loading"…...
【汽车】-- 燃油发动机3缸和4缸
3缸和4缸燃油发动机是小轿车常见的发动机配置。以下从结构特点、性能、经济性等方面对两者进行对比,并分析优缺点及使用注意事项: 1. 结构与运行原理 3缸发动机 特点:少一个气缸,内部零部件更少,整体结构更紧凑。优点…...
轻量级的 HTML 模板引擎
Mustache 简介:Mustache 是一个非常简单的逻辑少的模板引擎,支持 HTML 文件中的占位符替换。它不会执行复杂的逻辑,只支持简单的变量替换。 安装: npm install mustache示例: const Mustache require(mustache);c…...
Mysql | 尚硅谷 | 第02章_MySQL环境搭建
Mysql笔记:第02章_MySQL环境搭建 说明:本内容整理自尚硅谷B站MySQL视频>>尚硅谷B站MySQL视频 文章目录 Mysql笔记:第02章_MySQL环境搭建第02章_MySQL环境搭建 1. MySQL的卸载步骤1:停止MySQL服务步骤2:[软件](h…...
Maven学习(传统Jar包管理、Maven依赖管理(导入坐标)、快速下载指定jar包)
目录 一、传统Jar包管理。 (1)基本介绍。 (2)传统的Jar包导入方法。 1、手动寻找Jar包。并放置到指定目录下。 2、使用IDEA的库管理功能。 3、配置环境变量。 (3)传统的Jar包管理缺点。 二、Maven。 &#…...
CTF: 在本地虚拟机内部署CTF题目docker
step 1 安装基本依赖 sudo apt-get update sudo apt-get install -y \ca-certificates \curl \gnupg \lsb-releasestep 2 安装docker sudo apt-get remove docker docker.io containerd runc sudo apt-get update sudo apt-get install \apt-transport-https \ca-certificate…...
视频推拉流EasyDSS无人机直播技术巡查焚烧、烟火情况
焚烧作为一种常见的废弃物处理方式,往往会对环境造成严重污染。因此,减少焚烧、推广绿色能源和循环经济成为重要措施。通过加强森林防灭火队伍能力建设与长效机制建立,各地努力减少因焚烧引发的森林火灾,保护生态环境。 巡察烟火…...
wordpress怎么更改账号密码/广州顶正餐饮培训学校
1、形参:方法定义的时候,声明的小括号内的参数实参:方法调用的时候,实际传递给形参的数据或值。2、Java参数传递的机制规则参数 —》基本数据类型—》实参真实存储的数据值参数 —》引用数据类型—》实参存储数据的地址值3、值传递…...
wordpress首页只能是page/关键词指数查询
别人文章参考:https://blog.csdn.net/kkevinyang/article/details/80539940 第三类错误:supervisord进程被占用的错误 查询进程,kill掉在重启 ps -ef | grep supervisord 报错信息: Exited too quickly (process log may have…...
网站设计风格的关键词/近几年的网络营销案例
LINUX指令认识 使用XShell远程登录LINUx 查看Linux的ip ifconfig 1.ls[选项][目录文件] 对于目录,列出目录下所以子目录与文件。对于文件,列出文件名以及其他信息 -a 列出目录下的所有文件,包括以 . 开头的隐含文件。 -d 将目录象文件一样显示…...
wordpress导出出错/html网页制作网站
最近在研究nginx,接下来会把每天学习的知识点整理好之后,慢慢发上来。今天先对nginx做个大概的介绍,由于我是刚刚涉及这个领域,或许有很多东西都没能掌握的很好,有不足或者错漏的欢迎大家积极指出。我想通过nginx是什么…...
怎么做网站注册名密码/百度手游app下载
用电脑办公的人有个习惯,如果有非常重要的文档要保存,都习惯存到桌面。重要文件存到桌面是非常有安全感的,随时进入电脑桌面都可以看到自己放在桌面的文件。真正熟悉电脑的人会发现,重要文件放在桌面是非常不安全的,因…...
网站维护专业/网店推广费用多少钱
import Vue from vue import App from ./App import router from ./router import axios from axios Vue.config.productionTip false Vue.prototype.$http axios;...