C-进制,多文件开发,预处理,地址

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C-进制,多文件开发,预处理,地址相关的知识,希望对你有一定的参考价值。

预处理指令:

1.分类
  a.文件包含指令  #include
  b.宏定义     #define
  c.条件编译指令  #if
 
2.特点
  a. 都是以#号开头
  b.预处理指令的后面没有分号
  c.编译前执行
 
 
3.文件包含指令: #include
  a.作用: 可以将制定的文件的内容拷贝到写指令的地方
  b.语法: #include “文件路径”     
1 #include <文件路径>
  c.使用:在编译之前,就会执行处理代码,这时候,就会将include后面的文件的内容拷贝到引用处,然后再检查语法,相当于写指令的这个地方实际上写的是文件中的内容
 
4.使用注意
  a.被包含的文件必须符合语法规范,否则在编译检查错误的时候就会报错.
  b.如果被包含的文件不存在,就会报错
 
5.被包含文件的存放问题
  一般情况下,不要乱放被包含的文件
  放在源文件目录下,和当前的.c在同一个目录—便于管理
 
  如果将被包含的文件和源文件放在同一个目录下,写指令的时候就不要写全路径了
  二是写一个相对路径: 和当前源文件的路径相同的部分删除就可以了
 
  绝对路径:从根目录开始的路径
  相对路径:相对于当前文件/文件夹的路径(相同的部分忽略)
 
  如果是一个相对路径,就会从当前文件所在的目录中去找
 

两种包含指令的异同点

  1.都是指定的文件的内容包含到写指令的地方
  2.不同点在于寻找指定文件的方式不一样
    a.如果文件路径用的是双引号
    →先去当前源文件所在的目录中查找文件,如果有,直接包含
    →如果没有,就取系统自带的编译器目录中查找,如果有,包含,  没有,报错
    b.如果是<>
    →直接去编译器目录中查找,有,包含,没有报错
 
调用c语言库函数中的函数
  1.将这个函数的声明所在的头文件包含进来
 
使用建议:
  1.自定义的被包含文件,不要乱放,放在和源文件同1个目录下
  2.如果包含的文件是我们自定义的文件,那么使用””
  如果包含的文件是系统自带的,使用<>
 
 

多文件开发

1.所有函数写在一个文件里的缺点
  → 混乱,不方便管理
  →不利于团队开发
 
2.每一个人负责一个模块的开发→模块化编程
  每个模块都是一个小功能
  不同的模块由不同的人负责
  模块/功能 → 函数
  谁需要使用这个功能,调用这个函数就行了
 
3.如果分模块开发
  1.新建一个.c文件,将功能相关的函数写在这个文件当中  
  2.一般是写模块的人提供两个文件
  .h文件, header头文件 专门写函数的声明
  .c文件, 代码文件,专门写函数的实现
 
4.调用模块函数的时候.先将头文件包含进来,然后直接调用函数
5.如果写模块的人需要新增,修改,删除函数,那么包括在头文件在内都要修改
 
总结:当程序的函数过多的时候,就要考虑分模块开发
 
 

进制知识:

1.基本概念
  1.数码: 数据的每一位的数字
  2.数位: 数码在数字中的位置, 从左到右从0开始依次递增
  3.基数:每一个数码可以有多少个数据来表示——实质是这个数据的进制
  4.位权:数码乘以基数的数位次方
 
2.内存中的数据存储单元是由1个1个的二进制位组成的,每一个二进制位职能存0或者1
  如果我们使用一个二进制来存储数据的话,每一个二进制位只能表示2个数据
  规定每 8 个二进制位为1组,称为1个字节,字节是存储数据的最小基本单位
 
3. 如何测量出每个变量在内存中占用的字节数?——sizeof()
  1.使用方法
    a. sizeof(数据类型)   返回这种数据类型的变量在内存中占据多少字节
    b. sizeof(变量名)  返回的是这个变量在内存中占据多少个字节
    c. sizeof(常量)     返回的是这个常量数据在内存中占据的字节数
 
  2.sizeof可以简写的情况
    测常量的时候可以省略小括弧
    测变量的时候也可以省略小括弧
    但是sizeof(int)不可以省略
 

进制-按位与

任何数按位与1的结果是: 是这个数的最低位
 
偶数的最低位是0,奇数的最低位是1
所以判断一个数是奇数还是偶数, 只要用这个数按位与1就可以了
1 → 奇数,  0 → 偶数
 

面试题:

判断一个数是否是偶数
int num = 10;
if((num & 1) == 0){
    偶数
}else 奇数
不要用傻逼的%2==0这种了
 
按位左移和按位右移可以用到某些特殊的乘除运算中, 而且会比乘除运算更快
例如  5 * 16 可以转换成  5 << 4
2048 / 16 可以转换成 5 >> 4
 

变量在内存中的存储方式

声明一个变量, 就是在内存中分配连续的指定字节数的内存空间
 
分配的时候,是从高地址到地址分配的, 连续分配
 
存储在变量中的数据是以数据的二进制补码形式存储进去的
 
在分配的空间内, 数据是按低位存储的,即 低位存储在低位字节, 高位存储在高位字节
 
变量的地址, 是组成这个变量的低字节的地址
 
& → 取地址运算符
 

几种不是很常用的修饰符

long long修饰符
long long int num = 10;
——8位   格式控制符: %lld
 
unsigned shot int
%hu
 
short
%h
 
unsigned long
%lu
 
unsigned long long
%llu
 

以上是关于C-进制,多文件开发,预处理,地址的主要内容,如果未能解决你的问题,请参考以下文章

C/C++语言编译生产可执行的二进制文件的过程??求大神详尽解释,

linux下c通过虚拟地址映射读写文件的代码

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

c_cpp C片段将十进制转换为二进制

译文:18个实用的JavaScript代码片段,助你快速处理日常编程任务

android.view.InflateException:二进制 XML 文件第 15 行:二进制 XML 文件第 19 行:膨胀类片段时出错