预处理程序

作者:追风剑情 发布于:2019-2-26 12:57 分类:Objective-C

示例

main.m

  1. #import <Foundation/Foundation.h>
  2.  
  3. // 所有的宏定义可以写在一个单独的头文件(xxx.h)中,然后使用#import "xxx.h"导入使用。
  4. // 宏命名方式: 1 全用大写字母 2 用小写字母k开头,后面的单词用驼峰式命名
  5. // 预处理程序
  6. #define TWO_PI 2.0 * PI
  7. #define PI 3.141592654
  8.  
  9. #define SQUARE(x) ((x) * (x))
  10. //#define MAX(a,b) ( ((a) > (b)) ? (a) : (b) )
  11.  
  12. // 定义一个用来判断是否为润年的宏,用反斜线换行。
  13. // #define IS_LEAP_YEAR year % 4 == 0 && year % 100 != 0 \
  14. // || year % 400 == 0
  15.  
  16. // 更合理的方式是定义一个方法宏
  17. #define IS_LEAP_YEAR(y) y % 4 == 0 && y % 100 != 0 \
  18. || y % 400 == 0
  19.  
  20. // 条件编译
  21. // #ifdef、#endif、#else、#ifndef、#elif语句
  22. //#define IPAD 1
  23. //或者无需定义值
  24. #define IPAD
  25.  
  26. #ifdef IPAD
  27. // 允许在#号后放一个或多个空格
  28. # define kImageFile @"barnHD.png"
  29. #else
  30. # define kImageFile @"barn.png"
  31. #endif
  32.  
  33. //用命令行编译时与可以定义宏
  34. //-D必须在程序名称之前输入
  35. //例如 clang -fobjc -arc -D IPAD program.m -
  36.  
  37. int main(int argc, const char * argv[]) {
  38. @autoreleasepool {
  39. int v = 10;
  40. //int y = ((v+1) * (v+1));
  41. int y = SQUARE(v+1);
  42. NSLog(@"y=%i", y);
  43. int year = 2020;
  44. if (IS_LEAP_YEAR (year)) {
  45. NSLog(@"%i is leap year", year);
  46. }else{
  47. NSLog(@"%i is not leap year", year);
  48. }
  49. // 条件编译
  50. NSLog(@"kImageFile: %@", kImageFile);
  51.  
  52. // 下面两种方式的宏判断作用相同
  53. #if defined (DEBUG)
  54. NSLog(@"debug mode ...");
  55. #endif
  56. #ifdef DEBUG
  57. NSLog(@"debug mode ...");
  58. #endif
  59. //
  60. #if !defined (DEBUG)
  61. NSLog(@"!debug mode ...");
  62. #endif
  63. //判断如果定义了DEBUG宏,且值为非0
  64. #if defined (DEBUG) && DEBUG
  65. NSLog(@"debug mode !0 ...");
  66. #endif
  67. //利用宏注释代码块
  68. #if 0
  69. NSLog(@"注释掉的代码块");
  70. #endif
  71. //消除IPAD宏的定义
  72. #undef IPAD
  73. }
  74. return 0;
  75. }

运行测试
111.png

标签: Objective-C

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号