Linux下的C语言-小白篇(一)

来源:互联网 发布:java 计算两个时间差 编辑:程序博客网 时间:2024/05/21 07:47

Linux下的C语言-小白篇(一)

C语言对于大家来说并不陌生,编写C语言更是不在话下,如果你说自己写不出多么惊艳的C代码,那起码还是能写出一个“Holle Word”的嘛,今天我将带大家更进一步的了解C语言,从基层了解C语言的整个形成过程,其中包括C的编辑,编译,链接等方面。

在这里如果现在让你来编一个C程序,大家想到的肯定是使用VC++6.0或者是Visual Studio系列等Windons下的IDE软件来编写,那么现在就有人要问了,什么叫做IDE软件呢?

IDE,集成开发环境(Integrated Development Environment)是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。

顾名思义IDE的目的就是要让开发更加快捷方便,通过提供工具和各种性能来帮助开发者组织资源,减少失误,提供捷径。它将编辑,编译,链接集成在一起,很是方便我们来编写C程序,但也因此非常不适合我们用来学习和深入了解C语言,所以今天我们不会使用这些软件来编写。

Windows这个环境不行了,那我们有一个非常适合我们的环境,那就是Linux,因为在Linux下,C代码的编辑,编译,链接等方面是相互独立的,我相信在分析完每一步后便更有助于我们对C语言的理解,在进入今天的主题前,我先来给大家介绍一下Linux:

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。

简单的来说,Linux就是一款开源的可供大家学习的操作系统。不同与Windows操作系统,Linux没有Windows那美观用户界面,操作起来也不如Windows不方便,Windows中我们操作只需要使用鼠标点击即可,但是在Linux下我们想要操作,必须要学会使用命令行代码,无论是查看、打开文件,还是创建、删除文件都是用命令行来实现的,我们先来学习一下Linux的指令:

1.Linux常用命令

Linux Terminal
这就是Linux输入命令的界面,也成为Linux终端。

  • ls //list 列出当前文件夹的所有文件
  • cd //change directory 更改(切换)目录
  • mkdir //make directory 创建目录(文件夹)
  • mv //move移动文件
  • rm //remove 删除文件(-f)
  • touch //创建文件
  • pwd //print work directory打印当前工作目录

这是最基本的几个操作符,我们来以此看一下效果:

  1. ls 指令 - 用来显示目标列表,在Linux中是使用率较高的命令。
    ls

  2. cd 指令 - 用来切换工作目录至dirname。 其中dirName表示法可为绝对路径或相对路径。
    这里写图片描述

  3. mkdir 指令 - mkdir命令用来创建目录。
    这里写图片描述
  4. rm 指令 - remove 删除文件(-f)
    这里写图片描述
  5. mv 指令 - move移动文件
    这里写图片描述
  6. touch 指令 - 创建文件
    这里写图片描述
  7. pwd 指令 - print work directory打印当前工作目录
    这里写图片描述

2.在linux环境实践

在学习了几个常用的指令后,接下来就要进行实战了,我们将使用vim编写一个程序,然后使用gcc查看【预处理】、【编译】、【汇编】、【链接】各阶段文件的内容。

  1. 编写文件
vim a.c

这里写图片描述
2. 整体实现代码

gcc -o a a.c

这里写图片描述
3. 分步实现—预处理

gcc -E a.c -o a.i

这里写图片描述
这里写图片描述
4. 分步实现—编译

gcc -S a.i -o a.s

这里写图片描述
这里写图片描述
5. 分布实现—汇编

gcc -c a.c -o a.o

这里写图片描述
这里写图片描述
6. 分步实现—链接

gcc -o Mya a.o

这里写图片描述

上面便是我们Linux下C程序编辑的基本步骤,相信经过这些步骤大家已经对C语言有了更高的理解,不再将C语言的编辑过程看成一步完成的。通过对编辑好的C程序进行预处理,然后对于处理完的文件进行编译,生成目标文件,该目标文件的内容为汇编语言,在然后对目标文件进行汇编,生成二进制文件,到此处计算机已经能够认识我们的程序了,最后便是对目标文件进行连接,生成可执行文件,这便是我们最终需要的文件。每一步都可以完成,并且每一步都可以生成相对应的文件,非常适合我们对C语言进行深入的学洗。


三.预处理标识符

在之前我们进行实践中,有提到过预处理,现在我们将在这里多讲几个有用的预处理标示符

  • _ _ LINE _ _ 文件当前的行号
  • _ _ FILE _ _ 进行编译的源文件
#include<stdio.h>int main(){    printf("file : %s  line : %d \n",__FILE__,__LINE__);    retrun 0;}

这里写图片描述

gcc a.c -o a1

这里写图片描述


  • _ _ DATE _ _ 文件被编译的日期
  • _ _ TIME _ _ 文件被编译的时间
#include<stdio.h>int main(){    printf("date : %s  time : %s \n",__DATE__,__TIME__);    retrun 0;}

这里写图片描述

gcc -o a2 a.c

这里写图片描述


  • #
  • # #

‘#’可以吧一个宏参数变成相对应的字符串。

#include<stdio.h>#define PRINT(FORMAT,VALUE)\printf("the value of " #VALUE " is "FORMAT "\n",value)int main(){    int i=10;    PRINT("%d",i+3);    return 0;}

这里写图片描述

gcc -o b1 a.c

这里写图片描述


“##”可以吧位于它两边的符号合成一个符号,它允许宏定义从分离的文本片段创建标识符。

#include<stdio.h>#define ADD_TO_SUM(num,value)\sum##num == valueint main(){    int sum5 = 0;    ADD_TO_SUM(5,10);    return 0;}

这里写图片描述

gcc -E a.c -o a.i

这里写图片描述

四.宏和函数的区别

用#define使用参数来定义宏,宏的参数用圆括号括起来,可以使一个参数或者多个参数,然后在使用的过程中这些参数将会被替换。
类函数宏只会做字符串替换(宏定义都只会做字符串替换),替换后为3+1*3+1,结果就是7;而一般函数就会把参数带进函数进行计算后返回结果,这里其实就是(3+1)*(3+1)。


在这里我会写2个关于宏的程序,可以一起来看看。

五.写一个宏可以将一个数字的奇数位和偶数位交换。

#include<stdio.h>#include <windows.h>#define  EXC(x) printf("%d %d ",(x>>(i-1)) & 0x1, (x >> i) & 0x1)int main(){    int a = 0;    int i = 0;    printf("请输入一个数 0 ~ 255 之间!\n");    scanf_s("%d", &a);    for (i = 7; i >= 0; i -= 2)    {        EXC(a);    }    system("pause");    return 0;}

六.使用宏实现两个数中求较大值。

#include<stdio.h>#include <windows.h>#define  MAX(x,y)\x > y ? x : yint main(){    int x = 0;    int y = 0;    printf("请输入两个数:如(x y)\n");    scanf_s("%d %d", &x, &y);    printf("%d%d 两个数中较大的是:%d\n", x, y, MAX(x, y));    system("pause");    return 0;}

到这里相信大家对Linux有了一定的了解,并且在Linux下对C语言进行了分解编译,更好的理解C程序的形成过程,并且在后面介绍了C 语言中的预处理标示符,在Linux下更加清晰的看到了预处理阶段到底进行了那些操作,而后编写了两个关于宏定义的程序,希望能够帮助大家更好的理解!!

原创粉丝点击