首页 > 其他分享 >c语言笔记1

c语言笔记1

时间:2023-08-13 22:33:58浏览次数:42  
标签:文件 gcc 语言 ... 位置 笔记 命令 目录

C语言笔记1(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 链接

标签:文件,gcc,语言,...,位置,笔记,命令,目录
From: https://www.cnblogs.com/dijun666/p/17626326.html

相关文章

  • go语言环境要这样搭建才"省钱"
    go语言环境要这样搭建才省钱目录go语言环境要这样搭建才省钱本篇概要集成开发环境工具(ide)Goland或IntelliJIDEAVisualStudioCode其他集成开发环境VisualStudioCode的go语言开发环境搭建VisualStudioCode安装go编译环境安装配置go环境变量安装go语言插件使用golang编程本篇......
  • PMP 学习笔记(九)
    08.09星期三有新干系人加入时,先分析,再做其他操作敏捷项目有新需求,先列入到待办项列表,再分析影响,不需要分类风险管理计划是项目经理自己用的,不是用于上报的要削减预算,必须缩小范围质量审计和合规有对应关系整合工作不能委托/授权给其他人风险问题要“疑似从有”技术意见......
  • 《深入理解Java虚拟机》读书笔记:内存分配策略
    Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。关于回收内存这一点,我们已经使用了大量篇幅去介绍虚拟机中的垃圾收集器体系以及运作原理,现在我们再一起来探讨一下给对象分配内存的那点事儿。对象的内......
  • [学习笔记] 概率 & 期望
    一、一些定义注:以下定义并非严谨定义,只是便于理解。\(P(A)\):事件\(A\)发生的概率。\(E(X)\):随机变量\(X\)的期望值,有公式\(E(X)=\displaystyle\sum_{w}w\timesP(X=w)\)。独立事件:两个事件\(A,B\)发生没有关联,有\(P(A\wedgeB)=P(A)\timesP(B)\)......
  • #region在多种编程语言及IDE中进行代码折叠,包括python msvc++ c#等
    vs/rider中折叠C#代码在写C#的时候,在visualstudio中可以使用#region和#endregion来进行代码折叠,那么在pycharm中是否可以呢?//这里有很多的代码......#region//这里的数百行的伪代码,可以直接折叠起来,方便阅读及归类[MenuItem("KEngine/KSFrameworkOptionsandHelp")]priva......
  • JavaScript学习笔记
    JavaScript1JavaScript输出JavaScript能够以不同方式"显示"数据:使用window.alert()写入警告框使用document.write()写入HTML输出使用innerHTML写入HTML元素使用console.log()写入浏览器控制台1.1使用innerHTML如需访问HTML元素,JavaScript可使用doc......
  • <学习笔记>整除分块
    \([CQOI2007]余数求和\)求\(G(n,k)=\sum_{i=1}^{n}k\modi\)因为\(k\modi=k-\lfloor\frac{k}{i}\rfloor*i\)所以就成了求\(n*k-\sum_{i=1}^{n}\lfloor\frac{k}{i}\rfloor*i\)求后者:首先枚举左端点\(l\),然后就可以求出左端点所属区间的\(\lfloor\frac{k}{i}\rfloor......
  • 笔记本电脑停滞发展的二十年,该如何进行大的进步?
    在过去的二十年里,笔记本电脑的技术虽然有所改进,但整体进步却相对停滞。这主要是由于市场竞争激烈,生产商们注重维持市场份额,而忽略了在技术创新上的投入。然而,在不断发展的科技领域中,笔记本电脑再也无法满足人们的需求,需要进行大的进步。首先,在硬件方面,笔记本电脑需要更高的处理能......
  • 青龙脚本学习笔记
    1.安装https://github.com/whyour/qinglonghttps://raw.githubusercontent.com/whyour/qinglong/master/docker/docker-compose.yml 5700端口进行配置,搞完后把端口关了,免得被攻击  2.自动获取京东京豆的脚本 订阅脚本https://github.com/KingRan/KR.git ......
  • 代数与计算 笔记整理(未完)
    Lecture1课程介绍:(1)图同构的群论算法。(2)匹配的代数算法。前置知识:群论,包括群同态、合成列、群作用、自同构等。定义一张图\(G=(V,E)\),\(V\):点集,\(E\subset\binomV2\):边集。其中\(\binomV2\)表示从\(V\)中选出两者构成的集族。\(|V|\)是\(G\)的order,\(......