c语言tmp有头文件吗,浅析YYKit(base 篇)之头文件解析 1-tmp是什么文件

2024-02-13 01:50

本文主要是介绍c语言tmp有头文件吗,浅析YYKit(base 篇)之头文件解析 1-tmp是什么文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

yykit 是最近一个很火的开源框架,今天来研究看看yykit源码和一些原理,刚拿到yykit还是 很惊讶,来看看yykit 的目录,功能不仅强大,而且是十分全面的,我们来看看他的目录结构

75f01a08abd9a46a7f8cc8a2647c49a5.png

EA102D35-DD95-4EFA-8098-325B855E8CE7.png

不得不惊叹,真的好全面,一篇文章根本看不完,今天还是先从base 说起吧,

567b8389d08e130618f45b4c8b27ee76.png

09ECF4C2-6F37-40F8-BCBB-EEAD1AE9C19F.png

展开base 也是不少东西,先来看看这个头文件定义了什么吊炸天的东西

一开始看就尼玛就卡主了,#ifdef __cplusplus#define YY_EXTERN_C_BEGIN extern "C" {#define YY_EXTERN_C_END }#else#define YY_EXTERN_C_BEGIN#define YY_EXTERN_C_END#endif

这是什么鬼啊,各种百度,google之后总算是有些眉目了

先看 #ifdef cplusplus google 之后发现 c++中定义了cplusplus,C语言中没有该定义。即这个是用来:识别是c代码还是c++代码

在看EXTERN_C ,调用extern "C"会让c++编译器按照c的编译格式来编译。多用于c++库的头文件。 也即是说这个在c++的环境下,会强制编译器用 C 语言的规则去编译,而不是用 C++ 语言的规则。。因为 C++ 为了实现函数重载会把函数名和参数等联合起来合成一个中介的函数名,如果 C 函数也被这样编译会出问题,所以在我看来这个是为了兼容c++环境不会编译报错。

好吧解决了这个 在往下看看有什么比较难理解的东西

接下来是一个两重判断的 宏定义#ifndef YY_CLAMP // return the clamped value#define YY_CLAMP(_x_, _low_, _high_) (((_x_) > (_high_)) ? (_high_) : (((_x_) < (_low_)) ? (_low_) : (_x_)))#endif

咋一看不知道有什么用写成if else 语句大概是 if(x>high) return high; else

{ if(x

return x;

}

好吧接下来往下看吧#ifndef YY_SWAP // swap two value#define YY_SWAP(_a_, _b_) do { __typeof__(_a_) _tmp_ = (_a_); (_a_) = (_b_); (_b_) = _tmp_; } while (0)#endif

虽然这个一眼就看出来是个交换 函数还是有两个地方需要注意的为什么要用这个关键字呢typeof 还有为什么要用do while 直接用if else 不是就行了吗

百度一下你就知道typeof(var) 是gcc对C语言的一个扩展保留字,用于声明变量类型,var可以是数据类型(int, char*..),也可以是变量表达式。也即是说 变量a 还可以是个变量表达式这里吊吊的

,但为啥要用do while 这里就请众大神指点迷津了。

就不一一解析,看一些比较特别的吧#ifndef YYSYNTH_DUMMY_CLASS#define YYSYNTH_DUMMY_CLASS(_name_) \@interface YYSYNTH_DUMMY_CLASS_ ## _name_ : NSObject @end \@implementation YYSYNTH_DUMMY_CLASS_ ## _name_ @end#endif

这一段还是挺特别的, 但oc 编译静态库 要在build setting other linker flag设置 -all_load 和-Objc才可以将category 编进去

使用这段宏定义他可以虚拟新建一个与名字category 相同.h.m 让编译器 编译通过

但是每次要对所有category 都要申明这个的话可能会比较麻烦,直接加-all_load 据官方文档说,它可以使生成的可执行文件较大,并且产生一些不需要的文件#ifndef YYSYNTH_DYNAMIC_PROPERTY_OBJECT#define YYSYNTH_DYNAMIC_PROPERTY_OBJECT(_getter_, _setter_, _association_, _type_) \- (void)_setter_ : (_type_)object { \

[self willChangeValueForKey:@#_getter_]; \

objc_setAssociatedObject(self, _cmd, object, OBJC_ASSOCIATION_ ## _association_); \

[self didChangeValueForKey:@#_getter_]; \} \

- (_type_)_getter_ { \ return objc_getAssociatedObject(self, @selector(_setter_:)); \

}#endif//调用的方法 @interface NSObject (MyAdd) @property (nonatomic, retain) UIColor *myColor; @end

#import @implementation NSObject (MyAdd)

YYSYNTH_DYNAMIC_PROPERTY_OBJECT(myColor, setMyColor, RETAIN, UIColor *) @end

使用runtime 运行时属性 给catetory 动态添加属性

文/嘿晴天(简书作者)

原文链接:http://www.jianshu.com/p/a5acbed59ef3

这篇关于c语言tmp有头文件吗,浅析YYKit(base 篇)之头文件解析 1-tmp是什么文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/704163

相关文章

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换