objective-c - 宏声明

标签 objective-c c

我在挖掘 tweejump 游戏的源代码时发现了这个宏。

#define ccp(__X__,__Y__) CGPointMake(__X__,__Y__)

对我来说,cpp 只是 CGPointMake 的别名。为什么需要这个?

最佳答案

  1. cpp 更少打字,并且
  2. 有人可以更改映射,例如围绕调用进行一些调试

#ifndef 调试
#define ccp(__X__,__Y__) CGPointMake(__X__,__Y__)
#其他
#define ccp(__X__,__Y__) myassert2(((__X__) > 0),((__Y__) > 0),\
CGPointMake(__X__,__Y__))
#endif

我们为什么要这样做?我们可以得到有错误的源代码行的错误:

#define myassert2(xc1, c2, fun)  ((c1) && (c2)? fun((c1),(c2)): \
       fprintf(stderr, "Error in file %s, line %d, c1=%d c2=%d\", \
                        __FILE__, __LINE__, (c1), (c2)) 

顺便说一句,一般来说,宏总是将参数括在括号中会更安全:

#define ccp(__X__,__Y__) CGPointMake((__X__),(__Y__))

但正如 jamesdlin 指出的那样,在函数调用的情况下,这并不重要。

恕我直言,最好有一个安全、易于解释和内存的“规则”,并且只有在有充分理由的情况下才会有所不同,而不是有一个更复杂的规则。毕竟,(在我的代码中)有比是否将宏的参数包含在括号中更有趣的问题需要解决 :-)

(我特别注意一些简单的规则,因为最近的 BBC Horizo​​n 节目提供了证据表明人类不能同时成功地思考三件事!-(

(帮助!像 #if ... 这样格式化 C 预处理器源代码的简单方法是什么?{} 不起作用,反引号不起作用,4 个前导空格不起作用不行。他们都吃掉了一些前导的 # 字符)

关于objective-c - 宏声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9845100/

相关文章:

ios - 当 UIDeviceOrientationDidChangeNotification 在 UIView 中捕获时,UIInterfaceOrientation 尚未更新

c - 为什么微软将他们的函数调用写在多行上?

c - 在编译时查找数组元素位置

arrays - 如何使用 scanf 将元素接收到数组中?

c - 如何比较两个大小不同的数组?

javascript - 哪种语言更适合与股票市场相关的 iPhone 应用程序 - JavaScript 还是 Objective-C?

ios - UICollectionview 和单元格

ios - 加载 View 时未调用方法

CPP 在 Mac 上未能通过健全性检查

ios - 缩放 UIImage 以与 CGContextDrawImage 一起使用