Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does "macro" mean in Objective-C?

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 meaning.

http://www.saturngod.net/ios-macro-define-value-with-condition

like image 555
sudeveloepr Avatar asked Dec 30 '13 10:12

sudeveloepr


People also ask

What is meant by macro in C?

A macro is a piece of code in a program that is replaced by the value of the macro. Macro is defined by #define directive. Whenever a macro name is encountered by the compiler, it replaces the name with the definition of the macro. Macro definitions need not be terminated by a semi-colon(;).

What is macro argument in C?

macro (array[x = y, x + 1]) passes two arguments to macro : array[x = y and x + 1] . If you want to supply array[x = y, x + 1] as an argument, you can write it as array[(x = y, x + 1)] , which is equivalent C code. All arguments to a macro are completely macro-expanded before they are substituted into the macro body.

What does #define do in Objective C?

#define name value , however, is a preprocessor command that replaces all instances of the name with value . For instance, if you #define defTest 5 , all instances of defTest in your code will be replaced with 5 when you compile. Follow this answer to receive notifications.

Why do we need macros in C?

In C, the macro is used to define any constant value or any variable with its value in the entire program that will be replaced by this macro name, where macro contains the set of code that will be called when the macro name is used in the program.


1 Answers

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))
like image 83
Nayan Avatar answered Nov 08 '22 19:11

Nayan