Linux高级C
本系列是基于入门学完的基础上,为了更好的玩机体验,对一些知识点的进一步延伸与扩展。
注意啦:以下是本人介绍哦
📕作者简介:S学长,致力于C/C++、嵌入式。从事嵌入式行业,热爱健身,身体倍棒的一位博主。
📗本文收录于Linux高级C系列,大家有兴趣的可以看一看
📘相关专栏C语言嵌入式开发、C语言入门系列等,日常Bug集期待你的指导。
📙Linux爱上Ubuntu系列正在发展中,喜欢嵌入式的朋友们可以关注一下哦!
一、预处理
使用gcc编译程序,需要经历四个步骤:预处理------编译-------汇编-------链接
预处理为编译的第一步
主要有以下四个功能
1、去掉注释
编译之前需要去掉,这些只为提高程序可读性,对程序本身并无实际意义的注释
2、头文件包含
两种格式:
(1) #include <文件名.h>
//编译器会直接去系统目录下去找头文件
(2) #indlude “文件名.h”
//编译器先在当前目录下找头文件,没有再去系统目录下找
3、宏替换
宏指的是用#define定义的符号,这些符号可以表示常量,字符串,或者表达式等
概念:在预处理时,编译器将会用常量,字符串,表达式替换掉程序中的宏
宏命名一般格式:(下划线)+大写文件名+(下划线)
宏的介绍在即入门C中有讲,不带参宏,带参宏等等,这里不在赘述。
代码示例:不同类型数据最大值
#include <stdio.h>
#define MAX(a,b) (a) > (b) ? (a) : (b)
#define FUN(a,b) (a)*(b)
//提醒宏参数要用括号
int fun1(int a,int b) {
return a > b ? a : b;
}
float fun2(float a,float b){
return a > b ? a : b;
}
int main(void){
int a,b;
printf("请输入a和b:");
scanf("%d%d",&a,&b);
printf("max = %d\n",fun1(a,b));
printf("max = %d\n",MAX(a,b));
printf("max = %.2f\n",fun2(4.5,6.7));
printf("max = %.2f\n",MAX(4.5,6.7));
printf("%d\n",FUN(a,b));
printf("%d\n",FUN(a+2,b+5));
return 0;
}
运行结果:
4、条件编译
介绍三种
1> 如果定义了宏,则编译代码段A,否则,编译代码段B,常用于测试函数
#ifdef 宏
代码段A
#else
代码段B
#endif
代码示例:测试代码
#include <stdio.h>
#define DEBUG
int fun(int a,int b)
{
int c;
c = a*a + b*b;
return c;
}
#ifdef DEBUG
int main(void)
{
printf("%d\n",fun(4,5));
return 0;
}
#endif
注释掉#define DEBUG 后主程序不运行。
2> 如果没有定义宏,则编译代码段A,否则,编译代码段B,常用于头文件
#ifndef 宏
代码段A
#else
代码段B
#endif
代码: 头文件的示例
#ifndef __HEAD_H__
#define __HEAD_H__
int x = 120;
#endif
防止多次引入头文件。
3>如果表达式为真,则编译代码段A,否则,编译代码段B,常用于注释一段代码
#if 表达式
代码段A
#else
代码段B
#endif
代码示例:注释程序
int main(void) {
#if 1
printf("hello world\n");
#else
printf("farsightg\n");
#endif
return 0;
}
二、字节序
概念:多字节数据在内存中存储时,每个字节的存放的顺序称为字节序.
字节序分为大端序和小端序
1>大端序
最低有效位所在的字节放在最高字节位置上,其他字节依次放在低字节位置上,则该字节序称为高位优先(即大端序)。
2>小端序
最高有效位所在的字节放在最高字节位置上,其他字节依次放在低字节位置上,则该字节序称为低位优先(即小端序)。
代码示例:字节序判断
#include <stdio.h>
void fun(void){
unsigned int x = 0x12345678;
unsigned char y = *(unsigned char*)&x;
if(y == 0x78)
printf("小端序\n");
else
printf("大端序\n");
}
int main(void){
fun();
return 0;
}
运行结果:
总结
主要讲解预处理四个步骤,在条件编译中企业会经常考。大端序和小端序是按照谁优先存储判定,先存小端数据就是小端序,反之亦然。
如果这份博客对大家有帮助,希望各位给S学长一个免费的点赞👍作为鼓励,并评论收藏一下⭐,谢谢大家!!!
制作不易,如果大家有什么疑问或给S学长的意见,欢迎评论区留言。