C语言学习笔记<二>

上一节主要写了一些关于编码和编程语言的相关知识,这一节主要来写一点基础知识点。下一节是C语言的最后一部分数据类型和文件。

1.预处理

程序编译过程:

首先进行预处理,将文件包含或者宏定义进行替换,成为比较完整的代码,与此同时检查语法问题,但此时仍然是C语言。经过编译器处理变为汇编语言,生成后缀为-i的文件。再次经过汇编器变为只有机器可以识别的机器语言,生成后缀为-o的文件,这时编译完成。

预处理部分通常在源码首部,这样看起来比较清晰。但是根据编译过程来讲,也可以在main里面。

1>文件包含

这是一个经常会用到的一个知识点,因为后面随着要写的代码越来越多,同时为了方面阅读和检查,会使用模块化的编程架构(当然还有其他很好用的编程架构,诸如:状态机架构,层次化架构,面向对象架构等等),随着这些架构的使用,一些函数会被写在别的.c和.h文件里面(.c文件里面是具体定义,.h文件里面只是对其里面函数的声明)。要用到这些被声明在别的文件里的函数的话,则必须引入这个.h文件。具体用法如下:

#include"你要引入的文件名.h",双引号也可以用<>来代替。

2>宏定义

这个用法的本质是替换。大体用法如下:

#define 宏名 

作用域

#undef 宏名(如果没有这一条,代表着作用域是从源码开始到源码结束)

具体用法是这样的:

a.无参数宏定义

#define 宏名标识符 宏体【常量,表达式(加括号,避免意义出错),格式化字符串】

标识符:

        由字母,数字,下划线组成

        第一个字符必须是下划线或者字母,不可与关键字相同

b.带参数宏定义(注意与函数的差别,会略略提到)

#define 宏名(形参列表)形参表达式也可以是多条语句,多条语句时使用{}括起来

与函数差别:表示式不会被计算,就像上面说的,只是替换,把宏名的位置上用后面的表达式替换了。而函数会把值计算出来,再把计算后的值传递给函数调用的地方。

个人觉得不太经常用,所以后期返回看的时候可能会不太理解,所以举例如下:

#include<stdio.h>
#define SWAP(a,b,mind) {mind=a;a=b;b=mind;}
int main(void){
int x,y,temp;
printf("Input two numbers x,y: ");
scanf("%d%d",&x,&y);
SWAP(x,y,temp)
printf("x=%d,y=%d",x,y)	;
return 0;		
}

运行结果: 

Input two numbers x,y: 2 3
x=3,y=2
--------------------------------
Process exited after 30.85 seconds with return value 0
请按任意键继续. . .
3>条件编译

 目的是进行选择性编译。

一般形式为:

a.#if 常量表达式1

      程序1

#elif 常量表达式2

       程序2

#else

     程序3

#endif

b.#ifndef 宏名

    程序1

#else

    程序2

#endif

注:#ifdef和#ifndef的用法相同,不做列举。这种在后面自己模块化分工时定义.h文件经常用到。

4>宏操作符和其他预处理指令

操作符#和##:

#:字符串操作符,将后面的字符串变成双引号包围的串。

##:连接操作符,标识符##标识符->标识符标识符,将两个标识符连接在一起。

预定义宏:_DATE_       会显示源文件编译日期

                  _TIME_         显示源文件编译时间

                  _FILE_         正在编译的源文件名

                  _LINE_          正在编译的行在源文件中的行号

                  _func_          正在编译的行所在函数的名称

这些用法用来调试

2.程序结构

这里就不细讲逻辑和关系运算符,特别注意的是优先级问题,故这里只列出优先级(比较重要,可以收藏方便查找):

1>选择结构

 if语句:根据条件的从属关系分为两种:平行的,从属的(即嵌套,后面可以通过别的编程架构来替代,毕竟看起来不太直观)

平行的:根据条件多寡分为有一,二,三种及三种以上的三种类型:

有一种:if(表达式)

                  语句;

两种:if(表达式)

                  语句1;

else               语句2;

三种及以上:if(表达式1)

                  语句1;

else if(表达式2)

                  语句2;

else             

                   语句3;

从属的:

if(表达式1){

if(表达式1.1)

语句1;

else

语句2;

}

else{

if(表达式)

巴拉巴拉(不想打了总之道理是这么个道理,和if里面一样的)

}

注意,在使用嵌套时最好像我一样加{},如果没加呢,每个else总是与之最近的相匹配。

switch语句:

这个语句就像点名一样,点到谁就是谁执行。这种条件会很清晰。比较推荐:

switch(表达式){

case  常量表达式1: 语句1;

case  常量表达式2:语句2;

default:  语句3;

}

条件运算符:当满足或不满足条件,都至执行单个的赋值语句时,使用条件运算符。

表达式1?表达式2:表达式3

意思是:表达式1为真,则条件表达式的值为表达式2,否则是表达式3。

2>循环结构

 一种是先判断再循环的while语句,另一种是先循环再判断的do while 的语句。由于比较简单,就不举例子了,while(1)值得一提,这样可以一直执行,在后期小车啥的用的较多。

for语句:

 for( 表达式1,表达式2,表达式3)

表达式1:初值,数值的起点

表达式2:终值,数值终点

表达式3:  数值从初值到终值的方式,比如说i++

break 和continue语句:

break,只能用在循环语句和Switch语句,在多层循环里只跳出一层循环

continue,只能用在循环语句里面,直接跳出。

3.函数

1>函数定义

 函数返回值类型  函数名(形参){

局部变量说明

语句,如有返回值,return 返回值;

}

2>函数调用

 直接作为一个语句

作为表达式的一部分,只适合有返回值的函数

作为一个参数

其实对函数而言这些知识点已经够了,更详细的下一篇会补充的。有点困,终于写完了。

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值