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

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!” 程序的完整步骤,适合放在博客中展示:

一、编写源代码

  1. 首先,打开终端,使用文本编辑器(这里以 vi 为例,你也可以选择 nano 等其他编辑器)创建一个名为 hello.c 的文件,在终端输入以下命令:
vi hello.c

此时进入 vi 编辑器的命令模式。

  1. 按下 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 表示程序正常结束。

  1. 编写完代码后,按下 Esc 键回到命令模式,然后输入 :wq 保存文件并退出 vi 编辑器。

二、使用 GCC 编译程序

在包含 hello.c 文件的目录下(可以通过 pwd 命令查看当前所在目录),使用以下 GCC 命令进行编译:

gcc hello.c -o hello

解释:
- gcc 是编译器命令,用于调用 GCC 编译器来处理我们的源文件。
- hello.c 是要编译的源文件名称,也就是我们刚刚编写的包含 “Hello, world!” 代码的那个文件。
- -o 选项用于指定输出文件的名称,这里我们将生成的可执行文件命名为 hello。如果省略 -o 选项,默认会生成一个名为 a.out 的可执行文件。

三、运行程序

  1. 检查执行权限
    编译后生成的可执行文件 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)标志,所以需要添加执行权限才能顺利运行这个文件。

  1. 添加执行权限
    使用 chmod 命令来为文件添加执行权限,有以下两种常用方式:
    • 使用数字形式修改权限
      命令格式为 chmod [数字权限值] [文件名],数字权限值是通过将所有者、所属组、其他用户的权限对应的数字相加得到的。r(读权限)对应数字 4w(写权限)对应数字 2x(执行权限)对应数字 1。比如要给所有者、所属组、其他用户都添加执行权限,对应的权限值就是 755(所有者 rwx4 + 2 + 1 = 7,所属组 r-x4 + 0 + 1 = 5,其他用户 r-x4 + 0 + 1 = 5),命令如下:
chmod 755 hello
- **使用符号形式修改权限**:

命令格式为 chmod [用户类型][操作符号][权限字符] [文件名],例如给所有者添加执行权限,可以这样操作:

chmod u+x hello

这里 u 表示所有者(user),+ 是添加权限的操作符号,x 表示执行权限。

  1. 运行可执行文件
    在确保文件有了执行权限后,就可以在终端中通过以下方式运行它(假设当前所在目录就是包含 hello 文件的目录,如果不在该目录,需要先切换到相应目录):
./hello

解释:./ 表示当前目录,这是因为 Linux 系统在查找可执行文件时,默认不会在当前目录查找(出于安全等考虑),所以需要明确指定当前目录下的可执行文件来运行。运行上述命令后,你就能在终端看到输出的 "Hello, world!" 字符串了。


三、使用 vi 编写 99 乘法表程序

  1. 打开终端,输入vi multitable.c命令创建并打开一个名为multitable.c的文件。此时进入 vi 编辑器的命令模式。
  2. 按下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;:定义两个整型变量ij,用于循环计数。
- 外层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

五、运行程序

  1. 权限相关说明:在 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(读权限)对应数字4w(写权限)对应数字2x(执行权限)对应数字1。比如要给所有者、所属组、其他用户都添加执行权限,对应的权限值就是755(所有者rwx4 + 2 + 1 = 7,所属组r-x4 + 0 + 1 = 5,其他用户r-x4 + 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&#xff08;GNU Compiler Collection&#xff09;是一套功能强大的编程语言编译器&#xff0c;在 CentOS 7 系统中广泛用于编译 C、C等多种编程语言的程序。它能够将源代码转换为可执行文件&#xff0c;让计算…...

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 分组&#xff0c;比如不同app,dataId varchar(64) NOT NULL COMMENT 数据存储id…...

【CSS in Depth 2 精译_071】11.4 思考字体颜色的对比效果 + 11.5 本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 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 子触发器&#xff08;在游戏内对新的事件进行注册&#xff09;2.2 触发器变量作用域2.3 复合条件2.4 循环2.5 计时器2.6…...

趣味编程:猜拳小游戏

1.简介 这个系列的第一篇以猜拳小游戏开始&#xff0c;这是源于我们生活的灵感&#xff0c;在忙碌的时代中&#xff0c;我们每个人都在为自己的生活各自忙碌着&#xff0c;奔赴着自己所走向的那条路上&#xff0c;即使遍体鳞伤。 但是&#xff0c;生活虽然很苦&#xff0c;也不…...

软件工程 概述

软件 不仅仅是一个程序代码。程序是一个可执行的代码&#xff0c;它提供了一些计算的目的。 软件被认为是集合可执行的程序代码&#xff0c;相关库和文档的软件。当满足一个特定的要求&#xff0c;就被称为软件产品。 工程 是所有有关开发的产品&#xff0c;使用良好定义的&…...

CountDownLatch阻塞后countDown未执行会如何?

背景 某项目封装了 Kafka 消费者 API&#xff0c;根据传递的消费者线程数&#xff0c;创建 N 个消费者线程同时消费对应 topic 的数据&#xff0c;并在线程启动后收集到全局列表中&#xff0c;方便在程序调用 stop 流程时逐个停止。 主控类在创建 Kafka 消费线程时使用了 Cou…...

k8s,operator

相对更加灵活和编程友好的管理“有状态应用”的解决方案&#xff0c;它就是&#xff1a;Operator 会议一下有状态应用&#xff1a; 比如数据库集群&#xff0c;数据挂载需要有顺序维护拓扑关系的应用 使用statefulSet这个对象来描述。 CRD又是什么&#xff1f; Operator的工作…...

使用 pyperclip 进行跨平台剪贴板操作

简介&#xff1a;pyperclip 是一个轻量级的 Python 库&#xff0c;支持在不同操作系统&#xff08;Windows、macOS、Linux&#xff09;中进行剪贴板的复制和粘贴。这个库的设计简单易用&#xff0c;非常适合需要频繁进行文本复制粘贴操作的场景。 历史攻略&#xff1a; 使用f…...

20 设计模式之职责链模式(问题处理案例)

一、什么是职责链模式 职责链模式是一种行为型设计模式&#xff0c;它允许将请求沿着处理者的链进行传递&#xff0c;直到有一个处理者能够处理它为止。换句话说&#xff0c;它将请求的发送者和接收者解耦&#xff0c;使得多个对象都有机会处理这个请求&#xff0c;从而避免了将…...

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天

开场介绍 今天的任务是继续改进一个虚拟的瓦片地图系统&#xff0c;使其适合处理更大的世界。我们希望这个系统能管理大范围的游戏世界&#xff0c;其中包含按需存储的小区域。昨天&#xff0c;我们介绍了“内存区域”的概念&#xff0c;用于管理持久性存储。我们计划今天继续…...

learn-(Uni-app)输入框u-search父子组件与input输入框(防抖与搜索触发)

1.父子组件u-search &#xff08;1&#xff09;父组件 <!-- 父组件 --> <template> <div><searchBar change"change" search"search"></searchBar> </div> </template> <script> // 子组件搜索 import…...

设置IMX6ULL开发板的网卡IP的两种方法(临时生效和永久有效两种方法)

设置开发板网卡的IP&#xff0c;有两种方法。 方法一&#xff1a;临时生效 第一种方式是临时设置&#xff0c;只有本次有效&#xff0c;重启后又要重新设&#xff0c;命令为&#xff1a; ifconfig eth0 192.168.5.9设置成功后可以使用ifconfig命令来查看已设置的 IP 地址。 …...

流量转发利器之Burpsuite概述(1)

目录 一、Burpsuite Burp Suite Spider 的主要特点&#xff1a; 在 Burp Suite 中使用 Spider&#xff1a; Spider 的用例&#xff1a; 限制&#xff1a; 声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 声明&#xff1a;本文主要用作技…...

Transformer入门(6)Transformer编码器的前馈网络、加法和归一化模块

文章目录 7.前馈网络8.加法和归一化组件9.组合所有编码器组件构成完整编码器 7.前馈网络 编码器块中的前馈网络子层如下图所示&#xff1a; 图1.32 – 编码器块 前馈网络由两个带有ReLU激活函数的全连接层组成。全连接层&#xff08;Fully Connected Layer&#xff09;有时也…...

element-plus中的resetFields()方法

resetFields&#xff08;&#xff09;确实是Element Plus中的方法&#xff0c;该方法主要用于重置表单&#xff0c;将其值重置为初始值&#xff0c;并移除校验结果。以下是对该方法的详细解释&#xff1a; 一、resetFields方法的作用 在Vue3结合Element Plus开发时&#xff0…...

【过滤器】.NET开源 ORM 框架 SqlSugar 系列

目录 0、 过滤器介绍 1、表过滤器 &#xff08;推荐&#xff09; 1.1 手动添加过滤器 1.2 禁用、清空、备份和还原 1.3 联表查询设置 1.4 动态添加 2、修改和删除用过滤器 2.1 局部设置 2.2 全局设置 &#xff08;5.1.4.62&#xff09; 3、子查询用过滤器 4、联表过滤…...

Jmeter Address already in use: connect 解决

做压测接口时&#xff0c;并发一段时间后&#xff0c;会报java.net.BindException: Address already in use: connect 原因&#xff1a; windows提供给TCP/IP链接的端口为 1024-5000&#xff0c;并且要四分钟来循环回收它们&#xff0c;就导致在短时间内跑大量的请求时将端口占…...

C#常见错误—空对象错误

System.NullReferenceException&#xff1a;未将对象引用设置到对象的实例 在C#编程中&#xff0c;System.NullReferenceException是一个常见的运行时异常&#xff0c;其错误信息“未将对象引用设置到对象的实例”意味着代码试图访问一个未被初始化或已被设置为null的对象的成…...

Leetcode数学部分笔记

Leetcode数学部分笔记 1. 回文数2. 加一3. 阶乘后的零4. x 的平方根5. Pow(x, n) 1. 回文数 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数 是指正序&#xff08;从左向右&#xff09;和倒序&…...

微信小程序web-view 嵌套h5界面 实现文件预览效果

实现方法&#xff1a;(这里我是在小程序里面单独加了一个页面用来下载预览文件) 安装 使用方法请参考文档 npm 安装 npm install weixin-js-sdk import wx from weixin-js-sdk预览 h5界面代码 <u-button click"onclick" type"primary" :loading"…...

【汽车】-- 燃油发动机3缸和4缸

3缸和4缸燃油发动机是小轿车常见的发动机配置。以下从结构特点、性能、经济性等方面对两者进行对比&#xff0c;并分析优缺点及使用注意事项&#xff1a; 1. 结构与运行原理 3缸发动机 特点&#xff1a;少一个气缸&#xff0c;内部零部件更少&#xff0c;整体结构更紧凑。优点…...

轻量级的 HTML 模板引擎

Mustache 简介&#xff1a;Mustache 是一个非常简单的逻辑少的模板引擎&#xff0c;支持 HTML 文件中的占位符替换。它不会执行复杂的逻辑&#xff0c;只支持简单的变量替换。 安装&#xff1a; npm install mustache示例&#xff1a; const Mustache require(mustache);c…...

Mysql | 尚硅谷 | 第02章_MySQL环境搭建

Mysql笔记&#xff1a;第02章_MySQL环境搭建 说明&#xff1a;本内容整理自尚硅谷B站MySQL视频>>尚硅谷B站MySQL视频 文章目录 Mysql笔记&#xff1a;第02章_MySQL环境搭建第02章_MySQL环境搭建 1. MySQL的卸载步骤1&#xff1a;停止MySQL服务步骤2&#xff1a;[软件](h…...

Maven学习(传统Jar包管理、Maven依赖管理(导入坐标)、快速下载指定jar包)

目录 一、传统Jar包管理。 &#xff08;1&#xff09;基本介绍。 &#xff08;2&#xff09;传统的Jar包导入方法。 1、手动寻找Jar包。并放置到指定目录下。 2、使用IDEA的库管理功能。 3、配置环境变量。 &#xff08;3&#xff09;传统的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无人机直播技术巡查焚烧、烟火情况

焚烧作为一种常见的废弃物处理方式&#xff0c;往往会对环境造成严重污染。因此&#xff0c;减少焚烧、推广绿色能源和循环经济成为重要措施。通过加强森林防灭火队伍能力建设与长效机制建立&#xff0c;各地努力减少因焚烧引发的森林火灾&#xff0c;保护生态环境。 巡察烟火…...

wordpress怎么更改账号密码/广州顶正餐饮培训学校

1、形参&#xff1a;方法定义的时候&#xff0c;声明的小括号内的参数实参&#xff1a;方法调用的时候&#xff0c;实际传递给形参的数据或值。2、Java参数传递的机制规则参数 —》基本数据类型—》实参真实存储的数据值参数 —》引用数据类型—》实参存储数据的地址值3、值传递…...

wordpress首页只能是page/关键词指数查询

别人文章参考&#xff1a;https://blog.csdn.net/kkevinyang/article/details/80539940 第三类错误&#xff1a;supervisord进程被占用的错误 查询进程&#xff0c;kill掉在重启 ps -ef | grep supervisord 报错信息&#xff1a; Exited too quickly (process log may have…...

网站设计风格的关键词/近几年的网络营销案例

LINUX指令认识 使用XShell远程登录LINUx 查看Linux的ip ifconfig 1.ls[选项][目录文件] 对于目录&#xff0c;列出目录下所以子目录与文件。对于文件&#xff0c;列出文件名以及其他信息 -a 列出目录下的所有文件&#xff0c;包括以 . 开头的隐含文件。 -d 将目录象文件一样显示…...

wordpress导出出错/html网页制作网站

最近在研究nginx&#xff0c;接下来会把每天学习的知识点整理好之后&#xff0c;慢慢发上来。今天先对nginx做个大概的介绍&#xff0c;由于我是刚刚涉及这个领域&#xff0c;或许有很多东西都没能掌握的很好&#xff0c;有不足或者错漏的欢迎大家积极指出。我想通过nginx是什么…...

怎么做网站注册名密码/百度手游app下载

用电脑办公的人有个习惯&#xff0c;如果有非常重要的文档要保存&#xff0c;都习惯存到桌面。重要文件存到桌面是非常有安全感的&#xff0c;随时进入电脑桌面都可以看到自己放在桌面的文件。真正熟悉电脑的人会发现&#xff0c;重要文件放在桌面是非常不安全的&#xff0c;因…...

网站维护专业/网店推广费用多少钱

import Vue from vue import App from ./App import router from ./router import axios from axios Vue.config.productionTip false Vue.prototype.$http axios;...