当前位置: 首页 > news >正文

C语言扫盲

文章目录

  • C版本
  • C语言特征
  • GCC
  • printf
  • 数据类型
  • 函数
  • 指针
  • 内存管理
    • void指针
  • Struct结构和Union结构
  • typedef
  • 预处理器
  • make工具
  • cmake工具
  • Project
    • integral of sinc function
    • emulator embedded system
    • an event schedule
  • 补充在线Linux终端
  • 安装Linux
  • 参考

建议还是国外教材学习…人家的PPT比国内的好太多了…

C版本

C90 ->C99-> C11->C17 ->C23

C语言特征

面向过程,编译型语言,源文件后缀.h或者.c, .s为汇编代码

GCC

C语言的编译器,可编译.c文件为二进制可执行文件
文件转化如下
.c->.i->.s->.o->可执行二进制文件

补充:linux 系统下.a文件为静态库文件,.so 为动态库文件。等同于windows 里的.dll 文件
在这里插入图片描述

//指定用C99的版本编译hello.c文件
$ gcc -std=c99 hello.c

printf

1.输出占位符
printf("%c is a",'c') //打印字符
printf("%s is a animal","")
printf("%i = 1 ",1) //打印整数
printf("%f",1.24) //打印单精度浮点数
printf("%lf",1.24) //打印双精度浮点数int a=1;int *p = &a;
printf("%p",p) //打印指针
printf("%zd",sizeof(1))//打印sizeof类型2.限定输出位数
// 输出 hello
printf("%.5s\n", "hello world");

数据类型

unsigned 代表无负数类型,默认signed

char

short,int,long

float和double

char[]和 char*=“asd”

C里无布尔类型,C99 标准添加了类型_Bool用1表示真,0表示假(实际还是整数类型),后续<stdbool.h> 里定义bool类型,true表示1,false表示0

函数

函数的参数和返回值,会自动转成函数定义里指定的类型。

C语言也是传入的是参数拷贝,如要修改对应内存值,传入内存地址进行操作

指针

int *p = NULL;
int a=1;
p=&a;//指针的重要公式
a==*(&a);

hex editor工具调试C代码时可以查看对应16进制内存地址

内存管理

C语言中全局变量存放在堆,用户自行管理,需要手动释放,否则会内存泄漏->OOM

局部变量存在栈里,函数结束后编译器自行释放,内存管理的函数用时再查,不做纪录

– malloc(), calloc(), realloc(), and free()

void指针

//void指针可跟其他类型指针转化
int a=1;
void * p=&a;
int *b=p;

Struct结构和Union结构


struct apple{char[] name;int index;
} f1//后写入的属性会覆盖前面的属性,union结构实际只有一个属性
union apple{int name;double number;
}

typedef

typedef unsigned char BYTE;

预处理器

#开头

#define MD 1 //宏定义
#undef //取消宏定义/**
*预定义宏,可以直接用
**/
__DATE__:编译日期,格式为“Mmm dd yyyy”的字符串(比如 Nov 23 2021)。
__TIME__:编译时间,格式为“hh:mm:ss”。
__FILE__:当前文件名。
__LINE__:当前行号。
__func__:当前正在执行的函数名。该预定义宏必须在函数作用域使用。
__STDC__:如果被设为1,表示当前编译器遵循 C 标准。
__STDC_HOSTED__:如果被设为1,表示当前编译器可以提供完整的标准库;否则被设为0(嵌入式系统的标准库常常是不完整的)。
__STDC_VERSION__:编译所使用的 C 语言版本,是一个格式为yyyymmL的长整数,C99 版本为“199901L”,C11 版本为“201112L”,C17 版本为“201710L”。

make工具

通过makefile文件搜索编译配置进行自动化编译的工具,可以只编译有变动的文件然后链接即可,链接比编译快的多

在这里插入图片描述

foo: foo.o bar.ogcc -o foo foo.o bar.ofoo.o: bar.h foo.cgcc -c foo.cbar.o: bar.h bar.cgcc -c bar.c
$ make foo.o# or
$ make bar.o# or
$ make foo

cmake工具

cmake不是自动化编译工具,是开源的跨平台自动化建构系统,写cmakelist.txt文件生成不同自动化编译工具需要的配置文件如make工具需要的makefile,然后执行make工具进行编译

img

Project

https://gitee.com/its-ah-xiao/c_project

integral of sinc function

emulator embedded system

an event schedule

补充在线Linux终端

https://copy.sh/v86/?profile=linux26

安装Linux

Virtualbox软件,下载centos7 minimal镜像安装即可

参考

【1】https://wangdoc.com/clang/

【2】https://www.cse.msu.edu/~cse251/index.html

相关文章:

  • 2、Stable Diffusion
  • Latex 自定义运算符加限定条件的实现
  • 2024年7天自学网络安全(黑客技术)进阶手册。
  • 大语言模型之LlaMA系列- LlaMA 2及LLaMA2_chat(上)
  • HAproxy,nginx实现七层负载均衡
  • AMBER学习记录--使用Multiwfn计算有机小分子的RESP电荷--问题及解决
  • 从Midjourney到秒画:探索国产AI绘图的崛起与未来
  • Python Web WebAssembly 与 Python 的协同工作
  • GO语言中make与new的区别
  • 数据库软题1-数据模型+数据库三级模式两级映像
  • 信息安全管理工程师(工信部教育与考试中心)
  • HTTP 与 HTTPS 的三次握手与四次挥手详解
  • android.bp cc_defaults
  • react中的ref三种形式
  • 单细胞miloR分析(基于 KNN 图的细胞差异丰度分析方法)
  • Android框架之Volley
  • angular2 简述
  • Apache Pulsar 2.1 重磅发布
  • Docker: 容器互访的三种方式
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Facebook AccountKit 接入的坑点
  • HashMap剖析之内部结构
  • JS字符串转数字方法总结
  • Mocha测试初探
  • Node + FFmpeg 实现Canvas动画导出视频
  • PAT A1092
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • underscore源码剖析之整体架构
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 安卓应用性能调试和优化经验分享
  • 高度不固定时垂直居中
  • 基于HAProxy的高性能缓存服务器nuster
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 扑朔迷离的属性和特性【彻底弄清】
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 微服务核心架构梳理
  • 小程序测试方案初探
  • 以太坊客户端Geth命令参数详解
  • 终端用户监控:真实用户监控还是模拟监控?
  • raise 与 raise ... from 的区别
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​油烟净化器电源安全,保障健康餐饮生活
  • (BFS)hdoj2377-Bus Pass
  • (Java数据结构)ArrayList
  • (ros//EnvironmentVariables)ros环境变量
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (二)Optional
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (一)基于IDEA的JAVA基础10
  • (自用)仿写程序
  • ******IT公司面试题汇总+优秀技术博客汇总