gpt4 book ai didi

objective-c - 在预处理器宏中包装内联 C 函数

转载 作者:搜寻专家 更新时间:2023-10-30 20:09:09 26 4
gpt4 key购买 nike

CGGeometry.h 的底部声明了以下函数和宏定义:

CG_INLINE bool
__CGPointEqualToPoint(CGPoint point1, CGPoint point2)
{
return point1.x == point2.x && point1.y == point2.y;
}
#define CGPointEqualToPoint __CGPointEqualToPoint

CG_INLINE bool
__CGSizeEqualToSize(CGSize size1, CGSize size2)
{
return size1.width == size2.width && size1.height == size2.height;
}
#define CGSizeEqualToSize __CGSizeEqualToSize

出于好奇,我的问题是为什么要声明 CGPointEqualToPointCGSizeEqualToSize 宏?为什么不直接使用内联函数定义,就像在它们上面声明的所有 CG...Make 函数一样?像这样:

CG_INLINE CGPoint
CGPointMake(CGFloat x, CGFloat y)
{
CGPoint p; p.x = x; p.y = y; return p;
}

CG_INLINE CGSize
CGSizeMake(CGFloat width, CGFloat height)
{
CGSize size; size.width = width; size.height = height; return size;
}

最佳答案

旧版本的 CoreGraphics 用于将符号声明为

extern int CGPointEqualToPoint(CGRect rect1, CGRect rect2);
extern int CGSizeEqualToSize(CGRect rect1, CGRect rect2);

随着 CoreGraphics 的发展,有人认为这些方法的实现是微不足道的可内联的,这在首次编写 CoreGraphics 时要么没有想到,要么没有采取行动。简单地弃用旧的非内联版本可能会引入二进制不兼容(一个足够激进的内联器甚至懒得发出符号,再加上一个寻找该符号的旧应用程序会爆炸)。定义只是旧标识符的补丁,因此您看到的只是新定义,而不是旧符号。

关于objective-c - 在预处理器宏中包装内联 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22996180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com