当前位置: 首页 > 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
http://www.lryc.cn/news/502158.html

相关文章:

  • PyTorch 切片运算 (Slice Operator)
  • SpringSecurity Oauth2 -账号密码实现多因子身份认证
  • 【CSS in Depth 2 精译_071】11.4 思考字体颜色的对比效果 + 11.5 本章小结
  • Y3编辑器文档4:触发器1(对话、装备、特效、行为树、排行榜、不同步问题)
  • 趣味编程:猜拳小游戏
  • 软件工程 概述
  • CountDownLatch阻塞后countDown未执行会如何?
  • k8s,operator
  • 使用 pyperclip 进行跨平台剪贴板操作
  • 20 设计模式之职责链模式(问题处理案例)
  • SpringBoot3集成MybatisPlus3和knife4j(swagger3兼容增强版)
  • 【MIT-OS6.S081作业1.3】Lab1-utilities primes
  • 游戏引擎学习第35天
  • learn-(Uni-app)输入框u-search父子组件与input输入框(防抖与搜索触发)
  • 设置IMX6ULL开发板的网卡IP的两种方法(临时生效和永久有效两种方法)
  • 流量转发利器之Burpsuite概述(1)
  • Transformer入门(6)Transformer编码器的前馈网络、加法和归一化模块
  • element-plus中的resetFields()方法
  • 【过滤器】.NET开源 ORM 框架 SqlSugar 系列
  • Jmeter Address already in use: connect 解决
  • C#常见错误—空对象错误
  • Leetcode数学部分笔记
  • 微信小程序web-view 嵌套h5界面 实现文件预览效果
  • 【汽车】-- 燃油发动机3缸和4缸
  • 轻量级的 HTML 模板引擎
  • Mysql | 尚硅谷 | 第02章_MySQL环境搭建
  • Maven学习(传统Jar包管理、Maven依赖管理(导入坐标)、快速下载指定jar包)
  • CTF: 在本地虚拟机内部署CTF题目docker
  • 视频推拉流EasyDSS无人机直播技术巡查焚烧、烟火情况
  • SpringBoot【十一】mybatis-plus实现多数据源配置,开箱即用!