Machine-translated by Google. Questions are authored in English.
Top

Discussion

What will the SWAP macro in the following program be expanded to on preprocessing? will the code compile?

#include <stdio.h>
#define SWAP(a, b, c)(c t; t=a, a=b, b=t)
int main()
{
    int x=10, y=20;
    SWAP(x, y, int);
    printf("%d %d\n", x, y);
    return 0;
}

 

  • A.It compiles
  • B.Compiles with an warning
  • C.Not compile
  • D.Compiles and print nothing

Answer: C

Correct answer: Not compile

The macro expands to

(int t; t=x, x=y, y=t);

which puts a declaration inside a parenthesised expression - something C does not allow. The trick of passing a type as a macro argument works only if the expansion places the declaration where a declaration may appear, typically inside a do { … } while(0) block.

No comment is present. Be the first to comment.
Loading…

Post your comment

Please log in or register to post a comment.