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;
}
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.
Examination Categories
- SSC Exams
- Banking Exams
- Teaching Exams
- Civil Services Exams
- Railways Exams
- Engineering Recruitment Exams
- Defence Exams
- State Government Exams
- Police Exams
- Insurance Exams
- Nursing Exams
- Other Government Exams
- NRA CET
- PG Entrance Exams
- Campus Placement
- MBA Entrance Exams
- CUET and UG Entrance
- Judiciary Exams
- Regulatory Body Exams
- Software Development