程序员的每一天(Day3)

C语言简介:

BCPL->newB->C->UNIX->Minix->Linux->gcc

C语言诞生于1970-1973年,在肯·汤普逊和丹尼斯·里奇(主导)的主导编写下完成,归属于美国贝尔实验室。

C语言是专门为了编写操作系统而诞生的语言,所以天生适合硬件编程,以运行速度快而著称,也非常适合实现数据结构与算法。

由于出现的时间过早,C语言是存在非常多的缺陷的,。也没想到普通人也能使用C语言编程,因此就存在缺陷,但是前辈们总结了一些避免的经验

《C语言的陷阱与缺陷》 C语言三剑客 《C程序设计语言》

C语言的语言很自由,也意味着危险,自由源于自律。

C89语法标准,gcc默认语法标准

C99语法标准,对C8标准的扩展和增强 gcc -std=gnu99

C11语法标准,全新的升级,但没有普及

------------------------------------------------

一、第一个C程序

#include<stdio.h>
int main()
{
	printf("hello world!\n");
    return 0;
}

#include<stdio.h>

  程序员所编写的代码并不是标准的C代码,需要一段程序把它翻译称标准的C代码,负责翻译的程序叫做预处理器,翻译的过程叫做预处理,

  被翻译的代码叫做预处理指令,以#开头的代码都是预处理指令。

#include

  #include 的功能是把一个头文件到导入到当前文件中

  #include <> 从系统指定的路径去加载头文件

  #include “” 先从当前路径下加载头文件,如果找不到,再从系统指定的路径下加载头文件

操作系统是通过设置环境变量来指定加载头文件的路径

stdio.h

  头文件:以.h结尾,里面存储的是一些辅助性的代码,绝大部分是函数的声明

  源文件:以.c结尾,里面存储的是具有功能性的代码

  C语言标准委员会为C语言以函数的形式提供了一些基础功能,这些函数就被封装到了libc.so库中

  用很多头文件负责对库中的函数进行分类说明,stdio.h就是其中的一个,常用的还有stdlib.h string.h

  stdio.h负责对输入输出功能的函数进行说明

main函数

  C语言以函数为单位来管理代码,是管理代码的最小单位,一个函数就是一段具有某项功能的代码段

  main函数是整个程序的执行入口,有且只有一个

  int是一种数据类型,它表示main函数的执行结果是一个整数

  return 功能有两个:1、结束函数的执行

           2、返回一个数据给函数的调用者

  main函数是由操作系统调用的,它的返回值是给操作系统的,反映了程序是怎么样结束的,

  通常有三种情况:

    正数 出现异常 (别人的错误)

    0 一切正常

    负数 出现错误 (自己的错误)

  通过echo $? 来查看程序的返回值

  printf / scanf ,一般用来调试代码 printf("------------\n")

  转义字符:

    键盘上一些按键是没有符号的,只能用一些特殊的字符组合来表示,这些特殊的字符组就是转义字符,\n就是其中一个

      \n 换行 \b 退一个字符 \a 铃响

      \r 回到行首 \t 制表符,用于对齐数据 \ 表示一个\

      %% 表示一个%

C语言以分号作为一行代码的结束,使用大括号划分代码区域

二、编译器

  负责把人能看懂的记录了代码的文本文件,翻译成及算你能看懂的二进制文件,由预处理器、编译器、链接器

  gcc是由GNU组织为了编译Linux内核代码而开发的一款免费、开源的编译器,默认采用C89标准,-std=gnu99可以设置语法标准

常用的参数:

					-E  显示预处理的结果

					-c  只编译不链接

					-o  设置编译结果的名字

					-I  指定头文件的加载路径

					-S  生成汇编代码

					-l  指定要使用的库文件  -lm(数学库)  

					-Wall    以更严格的标准来检查代码,尽可能多地显示警告

					-Werror  把警告当错误处理

三、C代码变成可执行程序的过程

  1、预处理 把源文件翻译成预处理文件

    gcc -E code.c 显示预处理的结果

    gcc -E code.c -o code.i 生成以.i结尾的预处理文件

  2、编译 把预处理文件翻译成汇编文件

    gcc -S code.i 生成以.s结尾的汇编文件

  3、汇编 把汇编文件翻译成二进制的目标文件

    gcc -c code.s 生成以.o结尾的目标文件

  4、链接 把若干个目标文件合并成一个可执行文件

    gcc A.o B.o C.o。。。 默认生成一个a.out的可执行文件

  C语言的文件类型:

    .h 头文件

    .h.gch 头文件的编译结果,优先级高于.h

    .c 源文件

    .i 与处理文件

    .s 汇编文件

    .o 目标文件

    .a 静态库文件

    .so 共享库文件

四、数据类型

  为什么要对数据进行分类:

    1、现实社会中的数据就是自带类别属性

    2、对数据进行分类可以节约存储空间、提高运行效率

  存储空间的单位:

    Bit 比特 一个二进制位,只能存储0或者1,计算机存储数据的最小单位

    Byte 字节 八个二进制位,计算机存储数据的基本单位

    Kb 1024字节

    Mb 1024Kb

    Gb 1024Mb

    Tb 1024Tb

    Pb 1024Tb、

  C语言中数据分类两大类:自建(程序员自己设计的:结构、联合、类)和内建(C语言自带)

  注意:可以使用sizeof运算符计算类型的字节数

  整型:

    有符号 signed char 1 -128~127

       ​signed short 2 -32768~32767

       signed int 4 正负20亿

       signed long 4/8

       signed long long 8 正负9开头19位整数

  注意:signed 不加代表加

    无符号 unsigned char 1 0~255

      unsigned short 2 0~65535

      unsigned int 4 0~40亿

      unsigned long 4/8

unsigned long long 8 0~1开头的20位整数

  注意:由于定义无符号数据时比较麻烦,标准库把这些无符号的类型重新定义成了一下类型:

  使用时需要包含头文件:stdint.h

    uint8_t uint16_t uint32_t uint64_t

    int8_t int16_t int32_t int64_t

  浮点型:

    float 4

    double 8

    long double 12/16

  注意:浮点型数据采用科学计算方法,二进制与真实数据之间需要进行换算,因此浮点型数据耗时要比整型数据多得多,

  编程时尽量选择整型

  小数点后六位有效

time ./a.out 计算程序运行时间

  模拟型:

    字符型 char

      字符其实就是符号或图案,内存中存储的是整数,当需要显示成字符时会根据ASCII码表中对应的关系显示出相应的符号或图案

      ‘\0’ 0

      ‘0’ 48

      ‘A’ 65

      ‘a’ 97

    布尔型 bool

      先有的C语言之后才有了bool类型,所以C语言中不可能有真正的布尔类型,stdbool.h对布尔类型进行了模拟

      bool true(1) false(0)

五、变量与常量

  什么是变量:程序再运行期间数据可以变化的叫做变量,相当于存储数据的盒子

  定义:
    类型 变量名;

  取名规则:

    1、由字母、数字、下划线组成

    2、不能以数字开头

    3、不能与32个关键字重名

    4、见名知意(功能、类型、范围。。。)

    printf scanf bool 可取名 但在编译时会报错

  使用:

    赋值: num = 100;

    参与运算:num*10;

  注意:在C语言中,变量的默认值是随机的,为了安全起见要进行初始化,一般初始化为0,在变量作为累加器、计数器时必须初始化为0

  变量的输入、输出:

    int printf(const char *format, …);

  功能:输出数据

  format:“双引号包含的格式信息(提示信息+占位符)”

  … :变量列表

  返回值:输出字符的个数

  类型占位符:C语言通过类型占位符的方式来传递变量的类型

%hhd(char) %hd(short) %d(int) %ld(long %lld(long long)有符号

%hhu %hu &u %lu %llu                      无符号

%f %lf %LF(long double)

%c %s(字符串)

    int scanf(const char *format, …);

      功能:输入数据

      format:“双引号包含的格式信息(占位符)”

      … :变量地址列表

      返回值:成功输入的变量个数

注意:scanf需要的时变量类型、变量地址

    变量地址=&变量名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值