Question: Is it correct way to write a multiple statements in one Macro?

```
 #define AB() do { printf("hi"); } while(0)

```

Answer: 
Yes.

Although the correct way is most often to not have any function-like macro at all.

Please note that the do-while(0) trick is only relevant in code bases with sloppy brace style, such as 

```
if(x)
  AB();
else

```

The do-while(0) trick will prevent compiler errors caused by the stray semi-colon, if there is an `else` statement following. Had the macro only used braces, you'd get `if(){}; else` which is a syntax error.

Note that the above brace style caused one of the most expensive software bugs in history, known as the Apple "goto-fail" bug. So there are very sound reasons never to use it. If you always use `{}` after every statement, the do-while(0) trick also turns irrelevant.
Yes this is the correct way.

Ideally you want a macro to expand into a *single* statement, *not* a *compound* statement. Yours satisfies that.

You can safely use this macro in an `if`, `else` block.