I am wondering if both are the same thing?
They are not the same thing. A function in C or Objective-C is the organization of some procedural code into a single unit. It has very specific semantics and you can read about them in any basic C book with much more advanced information in more advanced books.
On the other hand, a macro is created during the pre-processing phase of compilation and is not a separate part of the actual binary. With a macro, the macro is actually replaced in code before complication happens so that copies are injected wherever the macro is used. That's why side effects are important to consider when using macros (because if the macro uses the same argument more than once, the side effects will occur more than once).
Here is a quick example to illustrate a macro:
#define SHOW_STRING_TWICE(string) printf("%s\n%s\n", string, string)
// ...
SHOW_STRING_TWICE("Hello, macro!");
During the pre-processing, the macro is expanded to this code:
printf("%s\n%s\n", "Hello, macro!", "Hello, macro!");
You can see how side effects are an issue in this code:
#define DOUBLE_NUMBER(number) ((number) + (number))
// ...
int doubleRandom = DOUBLE_NUMBER(generate_random_number());
In this case, when the macro is expanded, generate_random_number() is actually called twice when you would have expected it to be called only once.