【C语言】语法深入学习
(整理去年学习的资料,语言是说话的方式,可能我会在不同的时期爱上C语言吧)
一、cpp 预编译处理的学习
inline
static
__attribute__
对于声明为内联的函数,会强制优化。所有加了attribute((always_inline))的函数再被调用时不会被编译成函数调用而是直接扩展到调用函数体内。
二、写代码注意事项:
1、命名清晰
2、malloc/free尽量用自己定义的方法,且在另外一个文件里。(以便自构方法去测试是否溢出)
3、方法定义在头文件必须用static inline方法 最好直接return
4、全局用 g_modulename_ unsigned long
5、条件编译。不需要定义的函数和变量不用定义
6、malloc使用时候是动态数组(不知len)或者长度超过函数栈空间大小才去定义
7、函数传参带有数组时需要加数组大小(宏定义只在定义数组和判断最大值的时候使用)
8、用fwrite替代fpirntf
9、函数对齐:参数过多,除第一外,每个对应左括号后
10、goto少用 结构尽量清晰
11、用结构体替代单一的strcmp操作
12、初始化不需要赋值
13、static只定义在函数内的
14、
struct *_s
int g_*
typedef *_s {} *_t
15、头文件定义顺序: 库文件在前自定义在后
16、C_INCLUDE_PATH、CPLUS_INCLUDE_PATH以及CPATH常被用于在全局性地添加预处理C/C++时的包含目录,
17、 头文件保护
方式一:
#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
... ... // 一些声明语句
#endif
方式二:
#pragma once
... ... // 一些声明语句
#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。
#pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的"同一个文件"是指物理上的一个文件,而不是指内容相同的两个文件。
18、extern “C” :告诉编译器这部分用c语言
19、全局变量不能定义在头文件内 不然编译生成会有多份
20、数组最后一个 use NULL as array EOF
21、memset array error
char* str_p;
str_p = (char*)malloc(NUM);//临时申请地址
sizeof(str_p) == sizeof(pointer) == 8
sizeof(*str_p) == sizeof(char) == 1
char str[64];
sizeof(str) == 64 //在编译阶段就分配好
22、二维数组int arr[][]定义
法一:
不能直接用 int **arr_pr访问【ps:不知列数】
可用int(*p)[]访问
法二:
struct{
int arr[][];
};
23、尝试用obj的方式去编写c的通用方法(struct typedef)
三、其他的学习
1、线程保护
第三方库
1、cjson
cJSON_Print(const cJSON *item) 和 cJSON_PrintUnformatted(const cJSON *item) 这两个函数会调用 malloc 分配内存,需要调用 cJSON_free(void *object) 进行释放。
2.cgi
CGI的格式输出内容必须组织成标题/内容的形式。CGI标准规定了CGI程序可以使用的三个HTTP标题。标题必须占据第一行输出!而且必须随后带有一个空行
对编译出来的二进制CGI文件加s权限,并拷贝到Apache的CGI执行目录
chmod +s your_program.cgi
相关文章
- 19、ClickHouse企业中常见的20种用法
文章目录19、ClickHouse企业中常见的20种用法-- 1、表结构添加字段-- 2、删除语句-- 3、更新语法-- 4、查询表字段结构-- 5、展示字段加密处理 身份证号(字母加数字)加密-- 6、展示字段加密处理 手机号(纯数字)加密-- 7、计数 去重…...
2023/5/14 16:03:45 - 刷力扣的第一天脑子要长出来的感觉(怎么有人大四才开始啊啊啊啊啊啊啊啊啊啊啊啊,又是等成绩的一天,)
刷力扣的第一天脑子要长出来的感觉(为什么大四才开始啊啊啊啊啊啊啊啊啊啊啊啊) emmm,自己还是想不太出来(只是一点想法),可能还是会参考评论区,求各位轻喷 分析:带符号一定不是回…...
2023/6/3 2:43:35 - 数字化项目管理如何推动项目快速上市?【洞见6】
AIGC时代的到来,标志着互联网从信息化的轻工业时代正式进入了互联网数字化的重工业时代。随之迎来的是人工智能技术的广泛引用,如何在项目管理中应用也是一个挑战,因为的项目本身的特点就是变化、复杂。笔者在为了进行突破,开始不…...
2023/5/28 7:13:14 - SPI(服务提供发现机制)简单使用
一、概述 SPI的英文全称是Service Provider Interface,是Java内置的一种服务提供发现机制。一般常用于一些框架或组件库的开发,我们最熟悉JDBC就应用到了SPI机制,并且在Spring、Dubbo中也大量应用了SPI机制。SPI机制是针对同一个接口采用不同…...
2023/5/14 16:03:39 - JavaScript随手笔记---轮播图(点击切换)
💌 所属专栏:【JavaScript随手笔记】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#…...
2023/5/19 9:41:39 - Linux系统一键检测和加固脚本
主要是为了Linux系统的安全,通过脚本对Linux系统进行一键检测和一键加固。 Check_Script #包含2个文件 CentOS_Check_Script.sh README.txt 操作说明 #执行CentOS-Check_Script.sh脚本文件进行检查,命令格式如下 sudo sh CentOS_Check_Script.sh | tee check_da…...
2023/5/21 9:12:44 - 哈希表题目:矩阵置零
文章目录题目标题和出处难度题目描述要求示例数据范围进阶解法一思路和算法代码复杂度分析解法二思路和算法代码复杂度分析解法三思路和算法代码复杂度分析题目 标题和出处 标题:矩阵置零 出处:73. 矩阵置零 难度 3 级 题目描述 要求 给定一个 m…...
2023/5/16 10:00:35 - css复习2
盒子模型 案例:新浪导航案例-padding影响盒子好处 <div class"nav"><a href"#">设为首页</a><a href"#">手机新浪网</a><a href"#">移动客户端</a><a href"#">…...
2023/5/13 12:02:42 - 软考高项——第五章进度管理
范围管理进度管理总线索规划进度管理定义活动活动排序估算活动资源估算活动时间制定进度管理计划控制进度进度管理总线索 进度管理的总线索包括: 1)规划进度管理 2)定义活动 3)活动排序 4)估算活动资源 5)…...
2023/5/12 10:30:09 - Golang基础 函数详解 匿名函数与闭包
文章目录01 匿名函数1.1 定义匿名函数1.2 匿名函数使用场景02 闭包2.1 闭包实现公有变量2.2 闭包实现缓存效果参考资料匿名函数是指不需要定义函数名的一种函数实现方式(即没有名字的函数)。匿名函数多用于实现回调函数和闭包。 01 匿名函数 Golang 支持…...
2023/5/12 10:29:46 - 机器人学 markdown数学公式常用语法
参考链接1 本文包含了markdown常用的数学公式,按照目录可查询选用 初始类 行内数学公式均用两个符号包裹行间数学公式均用两个符号包裹 行间数学公式均用两个符号包裹行间数学公式均用两个符号包裹,用于表示重要的、需在行间单独列出的公式 $行内数学…...
2023/6/9 7:50:40 - 如何解决Prometheus场景中的nodata告警问题
项目地址:https://github.com/zhangrj/prometheus-nodata-exporter 我们知道,prometheus会为所有的target生成一个up指标,可以使用这个指标来判断exporter的在线情况生成告警,一个最常见的场景是: - alert: exporter…...
2023/5/12 10:28:55 - SpringBoot 启动配置文件加载和参数配置修改问题
SpringBoot 配置文件修正和参数覆盖SpringBoot 配置文件加载和参数覆盖1、SpringBoot 配置文件加载1.1、修改application.properties的参数几种方式1.2、方法一:直接CMD1.3、方法二:系统变量配置1.4、方法三:程序运行配置1.5、方法四…...
2023/5/27 21:18:41 - 【正点原子FPGA连载】第十三章QSPI Flash读写测试实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十三章QSPI Fl…...
2023/5/12 10:28:07 - 关于git仓库的一些使用
配置多个ssh-key 1.生成不同的key名 如github key ssh-keygen -t rsa -C "exampleemail.com" -f ~/.ssh/github_id-rsa如gitlab key ssh-keygen -t rsa -C "examlpe企业邮箱.com" -f ~/.ssh/gitlab_id-rsa创建完成后的 macbookMacBookProdeMacBook-Pr…...
2023/5/12 10:27:50 - webrtc QOS笔记一 Neteq直方图算法浅读
webrtc QOS笔记一 Neteq直方图算法浅读 文章目录webrtc QOS笔记一 Neteq直方图算法浅读Histogram Algorithm获取目标延迟遗忘因子曲线Histogram Algorithm DelayManager::Update()->Histogram::Add() 会根据计算的iat_packet(inter arrival times, 实际包间间隔 / 打包时长…...
2023/5/12 10:27:34 - FPGA时序约束与分析 --- 时序约束概述
本系列参考文献 — FPGA时序与约束分析-吴厚航 FPGA从综合到实现需要的过程如下:synth_design -> opt_design -> place-design -> phys_opt_design -> route_design 1、时序约束的理解 2、时序约束的基本路径 3、时序约束的步骤 4、时序约束的主要方法…...
2023/5/12 10:27:19 - [项目篇] 音乐播放器开发报告
文章目录1. 项目描述:2. 项目上线展现:3. 项目具体实现:1. 登录2. 注册3.退出系统4.添加音乐4.1前后端交互约定4.2上传文件业务逻辑:4.3创建model包中的music类4.4在MusicMapper接口中,声明insertMusic抽象方法4.5在mybatis包中添…...
2023/5/12 10:27:04 - Spring Cloud是什么?怎么理解Spring Cloud?
简介Spring Cloud项目的官方网址:https://projects.spring.io/spring-cloud/ Spring Cloud 并不是一个项目,而是一组项目的集合。在 Spring Cloud中包含了很多的子项目,每一个子项目都是一种微服务开发过程中遇到的问题的一种解决方案。它利…...
2023/5/16 22:58:50 - 力扣SQL专项突破33题详解及笔记--(由浅入深)
蜕变从此处开始(目录)前言Day01 选择595. 大的国家1757. 可回收且低脂的产品584. 寻找用户推荐人183. 从不订购的客户Day02 排序 & 修改1873. 计算特殊奖金627. 变更性别196. 删除重复的电子邮箱(稍难)Day03 字符串处理函数/正…...
2023/5/17 5:43:11
最新文章
- Web3能拯救失落的互联网人吗?
随着互联网的发展,人们逐渐感受到了中心化互联网的局限性和不足之处。 Web3 技术作为一种去中心化的互联网形态,为用户提供了更安全、透明和个人主权的在线体验。本文将探讨 Web3 是否能拯救那些在中心化互联网中感到失落的人们,让我们一起探…...
2023/6/9 12:10:20 - adb 拷贝RPMBD文件 到系统分区
要将 rpmbd 文件拷贝到 Android 设备的系统分区,您可以使用 adb 命令并遵循以下步骤: 1、连接 Android 设备到计算机上,并确保您已启用开发人员选项和 USB 调试功能。 2、打开命令提示符或终端,并输入以下命令,确保您的…...
2023/6/9 12:10:02 - 钢铁废水除氟
钢铁工业废水含多种污染物,包括大量的挥发酚、氟化物、石油类、悬浮物、砷、铅等有害物质。其中含氟工业废水的大量排放,不仅污染环境,还会危害到农作物和牲畜的生长发育,并且可以通过食物链影响到人体健康。所以对含氟废水需降氟…...
2023/6/9 12:09:48 - 使用 javascript 将鼠标指针移动到特定位置
文章目录 使用一些 CSS 样式创建基本的 HTML 结构使用 JavaScript 将鼠标指针移动到特定位置总结 请注意 ,无法将鼠标指针移动到 JavaScript 中的特定位置。 主要原因是它会给用户带来安全问题并损害用户体验。 在这篇文章中,我们将创建一个假的或自定义…...
2023/6/9 12:09:31 - dxf解析插件与dxf免费解析工具有哪些
dxf解析插件 dxf是一种常用的CAD文件格式,有很多解析插件可供选择。以下是一些常用的dxf解析插件: Open Design Alliance (ODA):这是一个支持多种CAD文件格式的工具包,包括dxf。它提供了一系列API和SDK,可用于访问和…...
2023/6/9 12:09:16 - Docker网络教程(四)macvlan 网络教程
使用 macvlan 联网 本系列的教程涉及独立 Docker 容器连接到 macvlan 网络的问题。在这种网络下,Docker 宿主机在它的IP之上,允许接受多个 MAC 地址的请求,然后再将这些请求路由至对应的容器里。 如果想了解更多其他的 Docker 网络的理论知…...
2023/6/9 12:09:02 - 作为Java开发工程师如何正确地对待和处理工作中的失误学习方法建议教训成长技巧[王大师]
本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》作者 公众号:山峯草堂,非技术多篇文章,专注于天道酬勤的 Java 开发问题、中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 转载说明:务必注明来源(注明:…...
2023/6/9 12:08:16 - Scrum经验性过程
软件开发是一个复杂的活动, 在软件产品开发的过程中不仅存在着需求的不确定性,也存在着技术的不确定性,再加上参与软件开发的主体通常是由多人组成的软件开发团队,加上人的因素,就让整个软件开发的活动变得非常复杂。如…...
2023/6/9 12:07:57 - CentOS 7 安装 Jenkins
一、准备工作 首选需要CentOS 7 安装 JAVA环境(JDK 1.8) 1.打开url选择jdk1.8下载 Java Downloads | Oracle 我选择linux x64版本: 2.下载 wget http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa…...
2023/6/9 12:07:12 - 百度出品,Nature重磅 -- 优化的mRNA设计算法可改善mRNA的稳定性和免疫原性
摘要 尽管mRNA疫苗已用于COVID-19的预防,但仍然面临不稳定和易降解的风险,这是mRNA疫苗存储、配送、效价等面临的重要障碍。先前的研究已表明,增加二级结构可延长mRNA的半衰期,再加上选择优化的密码子,可改善蛋白表达。…...
2023/6/9 12:07:01 - Django实现接口自动化平台(五)httprunner(2.x)基本使用【持续更新中】
上一章: Django实现接口自动化平台(四)解决跨域问题【持续更新中】_做测试的喵酱的博客-CSDN博客 下一章: 一、参考地址: 使用说明_httprunner2.0 概述及使用说明 二、介绍 HttpRunner是一款面向 HTTP(S) 协议的通…...
2023/6/9 12:06:10 - 硬核卡牌链游Era7,必看全新评测与攻略
概述 1.基本情况 1.1项目简介 1.2基本信息 2.项目详情 2.1团队 2.2资金 2.3产品 3.发展 3.1 Roadmap 3.2现状 4.经济模型 4.1供给 4.2代币用途 5.风险 概述 Era7是搭建在BNB chain上的一款结合了卡牌对战类似于(炉石传说)和卡牌挖矿&#…...
2023/6/9 12:05:27 - 如何让盒子水平垂直居中
如何让盒子水平垂直居中 如何让子盒子在父亲中水平居中: //子元素为块元素,那就给父元素加上 margin: a auto//子元素为行内元素、行内块元素,那么就给父亲加上 text-align:center如何让子盒子在父亲中垂直居中: //子元素为块级元素,那么给…...
2023/6/9 12:05:12 - 【多同步挤压变换】基于多同步挤压变换处理时变信号和噪声信号研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
2023/6/9 12:02:50 - MINIX 已死,Linux 又将如何呢?
导读MINIX 操作系统大约的确已经死了。Minix 原来是荷兰阿姆斯特丹的 Vrije 大学计算机科学系的 Andrew S. Tanenbaum 教授所开发的一个类 Unix 操作系统,全部代码共约 12,000 行,起初是为给学生讲解操作系统的运作细节而开发。 Linus Torvalds 也曾表示…...
2023/6/9 11:59:56 - linux ubi文件系统更新失败问题分析2
昨天打包了一个ubi根文件系统,打包成功,写板子flash成功,但系统运行后还是老的文件系统,具体过程如下: 使用脚本1,打包rootfs系统: 打包后的文件系统,下载到板子后,查看…...
2023/6/9 11:59:34 - 【大数据之路5-1】数据仓库工具 Hive
5. 数据仓库工具 Hive 1. Hive 概述1. Hive 核心概念2. Hive 优势3. Hive 特点4. Hive 和 RDBMS(关系型数据库)的对比【面试点】5. Hive 架构1. 用户接口2. 内部架构组件3. 底层支撑 Hadoop4. 元数据 MetaStore5. 执行流程6. Hive 的数据存储1. Hive 数据结构1. 相关说明2. H…...
2023/6/9 11:59:14 - 41从零开始学Java之向上转型与向下转型是怎么回事?
作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 面向对象的第三个特征是多态,实现多态有三个必要条件:继承、方法重写和向上转…...
2023/6/9 11:58:54 - 7个最佳WooCommerce跨境电商社交媒体插件
在互联的早期,您通常可以将产品直接放到网上并出售。但在今天你必须进行营销和做广告。如果没有包括社交媒体在内的可持续营销策略,您的商店可能会被忽视。值得高兴的是,有很多 WooCommerce跨境电商社交媒体插件可以用来传播信息,…...
2023/6/9 11:58:42 - SQL注入防御-WAF Bypass技巧(5)
0x00前言 X-WAF是一款适用中、小企业的云WAF系统,让中、小企业也可以非常方便地拥有自己的免费云WAF. 本文从代码出发,一步步理解WAF的工作原理,多姿势进行WAF Bypass。 0x01 环境搭建 官网: https://waf.xsec.io github源码: https://github.com/xsec-lab/x-waf X-WAF下载安…...
2023/6/9 11:58:01