c语言(c简介,环境设置,程序结构,Linux基本知识)

c简介,环境设置,程序结构,Linux基本知识

1. c简介

c语言是一种通用的高级语言,最初是为开发unix操作系统而设计的。

unix操作系统,c编译器,和几乎所有的unix应用程序都是用c语言编写的。由于各种原因,c语言现在已经成为一种广泛使用的专业语言。

1.易于学习

2.结构化语言

3.高效率的程序

4.可以处理底层的活动

5.可以在多种计算机平台上编译

2. c环境设置

2.1 本地环境设置

如果你想要设置c语言环境,需要确保电脑上有以下两款可用的软件,文本编辑器和c编译器

2.2 文本编辑器

Notepad通常用于Windows操作系统,vim/vi可用于Linux/UNIX操作系统上。

通过编辑器创建的文件通常成为源文件,源文件包含程序源代码。c程序的源文件通常使用扩展名.c。

2.3 c编译器

c语言编译器用于把源代码编译成最终的可执行程序。

最常用的免费可用的编译器是GNU的C/C++编译器。

2.3.1 UNIX/Linux上的安装

在命令行用以下命令来检查系统上是否安装了gcc:

$ gcc -v

如果已安装:

Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr .......
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)

未安装请按照http://gcc.gnu.org/install/上的详细说明安装

2.3.2 Mac Os上的安装

最快捷的获取gcc的方式是从苹果的网站上下载Xcode开发环境,并按照说明进行安装

Xcode可从 developer.apple.com/technologies/tools/ 上下载

2.3.3 Windows上的安装

为了在Windows上安装gcc,需要安装MinGW。可从 mingw-w64.org上进行下载,下载最新版本的MinGW安装程序,命名格式为MinGW.exe。

添加您安装的MinGW的bin子目录到PATH环境变量中,这样就可以在命令行中通过简单的名称来指定这些工具。

当完成安装时,可以从Windows命令行上运行gcc,g++,ar,ranlib,dlltool和其他一些GNU工具。

3. c程序结构

3.1 c Hello World实例

c程序主要包括以下部分:

1.预处理器指令

2.函数

3.变量

4.语句&表达式

5.注释

实例:

#include <stdio.h>
 
int main()
{
   /* 我的第一个 C 程序 */
   printf("Hello, World! \n");
   
   return 0;
}

1.程序的第一行#include<stdio.h>是预处理器指令,告诉c编译器在实际编译之前要包含stdio.h文件。

2.下一行int main()是主函数,程序从这里开始执行。

3.下一行/**/将会被编译器忽略,这里放置程序的注释内容。它们被称为程序的注释。

4.下一行printf(...)是c中另一个可用的函数,会在屏幕上显示消息

5.下一行return 0;终止main()函数,并返回值0。

3.2 编译&执行c程序

源代码保存在一个文件中,编译并运行的步骤:

1.打开一个文本编辑器,添加上述代码。

2.保存文件为hello.c

3.打开命令提示符,进入到保存文件所在的目录。

4.输入gcc hello.c输入回车,编译代码。

5.如果代码中没有错误,命令提示符会跳到下一行,并生成a.out(Windows生成a.exe)可执行文件。

6.a.out执行程序。

$ gcc hello.c
$ ./a.out
Hello, World!

如果是多个c代码的源码文件,编译方法如下:

$ gcc test1.c test2.c -o main.out
$ ./main.out

注:test1.c与test2.c是两个源代码文件。

4. Linux基本知识

4.1 基本概念

Linux是最受欢迎的自由电脑操作系统内核,是一个用c语言写成,符合POSIX标准的Unix操作系统。

Linux操作系统的诞生,发展,和成长过程依赖于五个重要支柱:

unix 操作系统,minix操作系统,GNU计划,POSIX标准和互联网。

4.2 常用Linux命令

4.2.1 Linux的文件结构:

在Linux操作系统中,一切的资源都是文件的形式存在的。

df -h查看硬盘的使用情况
cat /proc/meminfo查看内存的信息
Linux标准的文件目录结构:
. / 根,类似于Window的盘符;从/开始的文件都是绝对路径。
. /boot 系统引导程序
. /bin 存放常用的程序
. /sbin 存放系统管理的程序
. /home 普通用户的家目录,创建的新用户所在的位置。
. /lib和lib64 存放32位或64位的程序依赖库
. /usr 存放用户安装的应用程序及头文件、库文件
. /root root系统超级管理员的家目录
. /opt 额外的资源存放的位置
. /media 存放媒介的资源目录
. /dev 存放外部设备的资源目录,不能直接使用,需要将资源挂载到其他位置
. /mnt 将外部设备资源挂载的目录
. /proc 存放操作系统与硬件、版权相关信息,如cpu,meminfo
. /var 存放程序运行的可变资源
. /run 存放程序运行时的资源
. /etc 存放程序的配置资源和服务
. /tmp 存放临时文件的

4.2.2 Linux命令结构

语法:

命令名 [选项] [参数...]

命令存在哪些选项,需要查看帮助信息,查看帮助信息方式:

1) 命令 --help
2) man 命令
3) info 命令,包含了用法和参数说明
4) whatis 命令, 查看命令的简短描述

4.2.3 常用命令

1. man命令

查看命令的帮助信息的,这个命令包含三个级别(1.Linux命令 2.系统调用函数(内核提供给用户的接口函数) 3.库函数(c语言实现的函数))

命令语法:

man [1|2|3] [-f] 命令
2. 命令技巧
1)自动补全
1. 自动补全命令 :   输入命令+两次<Tab>
2. 自动补全文件名 : 输入文件名开头部分+按<Tab> 自动补全
2) 历史命令的记录
3. 命令的历史记录: 终端中按向上、向下的方向键,可以将之前执行的命令显示出来
3) 重定向
将命令的执行结果 输出到指定的位置(文件)上
1.重写模式 > 将目标文件清空,再写
2.追加模式 >> 将命令的结果追加到文件的尾部
用法:命令 [选项] [参数] > 或 >> 目标位置
4) 管道

Linux的管道代表的符号 | ,作用是将其左边的结果转交给右边的命令

3. ls命令

ls命令列出目录中的文件及子目录

默认情况下,显示是当前工作目录的文件及子目录

命令格式:

ls [-l -a -A -h -s -t] [文件位置]
选项:
1.-l 以列表的方式显示目录中的内容(文件,子目录)
2.-h 人性化显示文件大小的,即文件大小自动加单位(K,M,G,T,P)
  这个选项必须和-l 一起使用
3.-a 显示所有文件,包含.(当前目录), ..(当前目录的父级目录)和.开   头的隐藏文件。
4.-A 除了.和..之外,显示其它所有文件
5.-t 依据文件的修改时候进去排序,最新修改的排在第一位。
   要求和-l一起使用,如果想反向排序时,使用-r选项
6.-s 按文件大小排序,最大的排在第一位。一般和-l,-h,-r组合使用
4. tree命令

tree需要安装,功能是将指定文件位置的所有子文件及目录递归地展示出来(以树的结构)

安装:sudo apt install tree -y

命令格式:

tree [-L n] [文件位置]
5.clear命令

清除当前屏幕的所有内容(假清除,只是创建了一个新页)

6.which命令

查找命令的位置

7.head命令

查看文件内容的前n行

8.tail命令

查看文件内容的后n行

9. cd命令

cd(change directory)改变(切换)当前工作目录

命令格式:

cd 新工作目录的位置

目录位置的写法:

Linux中文件路径的分隔符:/ (斜杠)

Windows中文件路径的分隔符: \ (反斜杠)

1) 相对位置(相对于当前工作目录的位置)
   ./ 当前工作目录的位置【可省略】
   ../ 当前工作目录的父类目录的位置
   ../../当前工作目录的父级的父级目录
2) 绝对位置(从/开始)
3) 特殊的写法
   cd 切换到当前用户的家目录
   cd - 回到上一次的工作目录
   ~  代表当前用户的家目录
10. pwd命令

pwd(print work directory)打印当前工作的工作目录的绝对位置(文件位置)

11. cat命令

cat是查看文件内容的命令

命令格式:

cat [-n -b] <文件位置>

选项-n显示行号,-b非空的位置显示行号

12. rm命令

rm(remove) 删除文件或目录的命令

相关的命令: rmdir 删除空目录,mkdir 创建空目录

命令格式

rm [-r -f] <文件位置>

选项-r递归删除子目录及子文件,-f强制删除,不会提示错误信息(文件不存在)

13. cp命令

cp(copy)复制文件或目录到目标位置

命令格式:

cp [OPTION]...[-T] SOURCE DEST 复制source文件到dest位置
cp [OPTION]...SOURCE...DIRECTORY 复制多个source文件到目录中
cp [OPTION]... -t DIRECTORY SOURCE... 同上,先写目录

选项:-f强制替换,-r复制目录 -u更新文件或目录 -v显示复制的过程信息

14. mv命令

mv(move)移动文件或目录到新位置,或者重命名文件或目录

命令格式:

mv [OPTION]...[-T] SOURCE DEST 
mv [OPTION]...SOURCE...DIRECTORY 
mv [OPTION]... -t DIRECTORY SOURCE... 

选项:-f强制替换,-r复制目录 -u更新文件或目录 -v显示复制的过程信息

15. mkdir命令

用于创建空目录,可以级联创建父目录(不存在时)

命令格式:

mkdir [-p] 目录位置
16. touch命令

主要用于创建空文件,或者更新文件的最后修改时间

17. find命令

查找文件所在位置的命令

命令格式

find [目录位置][-maxdepth n][-name '*.h|c|txt'] [-mmin n] [-amin n] [-atime n] [-mtime n] [-cmin n] [-ctime n]

-atime n 最后访问的时间 是 n*24小时之前

-amin n 最后访问的时间 是 n分之前 (过去 n 分钟)

-mmin n 内容修改的分钟, -mtime 内容修改的n*24 小时。

-cmin 文件状态最后修改的分钟, -ctime 文件状态最后修改的n*24小时

n 的表示,可以带 + 表过大于n含义, - 表示小于n的含义

18. grep命令

主要用于过滤内容的(按行),一般于|之后使用

命令格式:

grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN]... [-f FILE]... [FILE...]

选项:-v反向匹配,-l输出匹配的文件位置,-L输出不匹配的文件位置,-i不区分大小写,--color[=never | auto | always]

19. ln命令

主要用于创建文件的链接

链接的类型:

  1. 硬链接:文件的别名,不会创建新的文件号(inode)

  2. 软链接:是文件的一个引用,是一个独立的文件,(具有inode文件号)

硬、软链接的区别:软、硬链接操作相当于对原文件的操作,唯一的区别是原文件删除时,硬链接文件不受影响,而软链接无效(目标不存在)

ln [-s] 目标文件 链接名
20. tar命令

tar主要用于创建压缩,解压缩文件

文件的压缩格式:gzip,bzip2

gzip压缩文件的扩展名:xxx.tar.gz

bzip2压缩文件的扩展名:xxx.tar.bz

命令格式:

tar [-][cxzjvtf] 压缩文件名 [-C 提取压缩文件的内容到指定位置] [待压缩文件或目录]

选项: c创建新的压缩文件,x解压,z是gzip格式,j是bzip2,v显示压缩或解压的过程文件信息,t显示压缩文件中的所有内容,f指定压缩文件名

4.3 vim编辑器

vim是一个非常强大的编辑器,可以用于开发各种语言的源码工具之一。

4.3.1 vim打开文件

命令格式:

vi 文件位置
vim 文件位置

4.3.2 vim的三种模式

1.编辑模式 :打开文件之后的默认模式,可以执行特定的指令,如i,o,a,O等,如果按i表示,进入插入模式。在编辑模式下,按shift:进入命令行模式

2.插入模式:输入文件内容,按esc退出插入模式,进入编辑模式

3.命令行模式:可以输入指令,回车执行,如x指令是保存并退出文件

4.3.3 编辑模式的指令

i 当前光标位置上开始插入内容
a 当前光标位置之后开始插入内容
o 在当前光标所在行的下方插入新的有一行(空行)
O (shift o) 在当前光标所在行的上方插入新的一行(空行)

[n]dd 从当前行向下删除n行,默认n为1
u     撤销刚刚的操作
ctrl+r 取消撤销


[n]yy  从当前行向下复制n行,默认n为1
p     将dd或yy操作的内容复制到当前光标所在行的下方


x      删除光标所在位置的内容

shift+^ 或 0 快速移动光标到行首
shift+$ 快速移动光标到行尾
gg      快速移动光标到文档的开始位置
G       快速移动光标到文档的最后一行的首字符位置

shift+[ 快速移动光标到段前
shift+] 快速移动光标到段尾
h j k l 移动光标(左,下,上,右)

组合应用:ggdG 清空文档 内容

4.3.4 命令行的指令

:set number    显示行号      :set nu
:set nonumber  取消显示行号   :set nonu
:set ff        查看文件的系统格式  dos,unix,mac
:set ff = nuix
:set fileencoding  显示文件的内容编码格式,utf-8,unicode,gbk,gb2312
:set fileencoding=utf-8
:n    跳转到n行,如1,同nG  如编辑模式  7G == :7
:/内容   从当前光标位置开始向下查找内容,会自动向上查找,按n向下查找下一个,按N向上查找上一个。
:%s/原内容/新内容/ig   全文档查找原内容,如果找到了则替换为新内容,i表示不区分大小写(字母),g 表示全文档(全局) , 如果没有g表示,只替换每行的第一个匹配的内容。

:x  保存并退出
:w  保存
:q  退出
:q! 强制退出
:wq! 强制保存并退出
:!linux有效命令

4.4 gcc编译器

gcc编译器是用于编译c源文件,生成系统可执行的二进制程序

4.4.1 检查gcc环境

which gcc

如果不存在的话,则需要安装

sudo apt install gcc -y

4.4.2 gcc编译命令

一步到位【推荐】

gcc [-o 目标程序名] 源文件

如果不指定-o时,默认生成a.out可执行文件

四步完成编译:

gcc -E xxx.c -o xxx.i  预处理
gcc -S xxx.i -o xxx.s  编译
gcc -C xxx.s -o xxx.o  汇编
gcc xxx.o -o xxx 链接
posted @   常羲和  阅读(157)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
// 侧边栏目录
点击右上角即可分享
微信分享提示