What does “macro” mean in Objective-C?

前端 未结 4 1490
被撕碎了的回忆
被撕碎了的回忆 2021-02-02 17:35

I am new to iOS development and I just want to know the meaning of macro in Objective-C?

I have found that \"macro\" is used with #define but still do not get its meanin

4条回答
  •  挽巷
    挽巷 (楼主)
    2021-02-02 17:48

    Yes, Larme is right. Macros can be used in many languages, it's not a specialty of objective-c language.

    Macros are preprocessor definitions. What this means is that before your code is compiled, the preprocessor scans your code and, amongst other things, substitutes the definition of your macro wherever it sees the name of your macro. It doesn’t do anything more clever than that.

    Almost literal code substitution. e.g.-

    Suppose you want a method to return the maximum of two numbers. You write a macro to do this simple task:

    #define MAX(x, y) x > y ? x : y
    

    Simple, right? You then use the macro in your code like this:

    int a = 1, b = 2;
    int result = 3 + MAX(a, b);
    

    EDIT:

    The problem is that the preprocessor substitutes the macro definition into the code before compilation, so this is the code the compiler sees:

    int a = 1, b = 2;
    int result = 3 + a > b ? a : b;
    

    C order of operations requires the sum 3 + a be calculated before the ternary operator is applied. You intended to save the value of 3 + 2 in result, but instead you add 3 + 1 first, and test if the sum is greater than 2, which it is. Thus result equals 2, rather than the 5 you expected.

    So you fix the problem by adding some parentheses and try again:

    #define MAX(x, y) ((x) > (y) ? (x) : (y))
    

提交回复
热议问题