C Macro & Preprocessor C Macro & Preprocessor Please wait while the activity loads. If this activity does not load, try refreshing your browser. Also, this page requires javascript. Please visit using a browser with javascript enabled. If loading fails, click here to try again Question 1 #include <stdio.h> #define PRINT(i, limit) do \ { \ if (i++ < limit) \ { \ printf("GeeksQuiz\n"); \ continue; \ } \ }while(1) int main() { PRINT(0, 3); return 0; } How many times GeeksQuiz is printed in the above program?134Compile-time errorC Macro & Preprocessor Discuss itQuestion 1-Explanation: The PRINT macro gets expanded at the pre-processor time i.e. before the compilation time. After the macro expansion, the if expression becomes: if (0++ < 3). Since 0 is a constant figure and represents only r-value, applying increment operator gives compile-time error: lvalue required. lvalue means a memory location with some address.Question 2 C #include <stdio.h> #if X == 3 #define Y 3 #else #define Y 5 #endif int main() { printf("%d", Y); return 0; } What is the output of the above program? 3 5 3 or 5 depending on value of X Compile time error C Macro & Preprocessor 50 C Language MCQs with Answers Discuss itQuestion 2-Explanation: In the first look, the output seems to be compile-time error because macro X has not been defined. In C, if a macro is not defined, the pre-processor assigns 0 to it by default. Hence, the control goes to the conditional else part and 5 is printed. See the next question for better understanding. Question 3 What is the output of following program? C #include <stdio.h> #define macro(n, a, i, m) m##a##i##n #define MAIN macro(n, a, i, m) int MAIN() { printf("GeeksQuiz"); return 0; } Compiler Error GeeksQuiz MAIN main C Macro & Preprocessor Discuss itQuestion 3-Explanation: The program has a preprocessor that replaces \"MAIN\" with \"macro(n, a, i, m)\". The line \"macro(n, a, i, m)\" is again replaced by main. The key thing to note is token pasting operator ## which concatenates parameters to macro. Question 4 #include <stdio.h> #define X 3 #if !X printf("Geeks"); #else printf("Quiz"); #endif int main() { return 0; } GeeksQuizCompiler ErrorRuntime ErrorC Macro & Preprocessor Discuss itQuestion 4-Explanation: A program is converted to executable using following steps 1) Preprocessing 2) C code to object code conversion 3) Linking The first step processes macros. So the code is converted to following after the preprocessing step. printf(\"Quiz\"); int main() { return 0; } The above code produces error because printf() is called outside main. The following program works fine and prints \"Quiz\" #include #define X 3 int main() { #if !X printf(\"Geeks\"); #else printf(\"Quiz\"); #endif return 0; } Question 5 #include <stdio.h> #define ISEQUAL(X, Y) X == Y int main() { #if ISEQUAL(X, 0) printf("Geeks"); #else printf("Quiz"); #endif return 0; } Output of the above program?GeeksQuizAny of Geeks or QuizCompile time errorC Macro & Preprocessor Discuss itQuestion 5-Explanation: The conditional macro #if ISEQUAL(X, 0) is expanded to #if X == 0. After the pre-processing is over, all the undefined macros are initialized with default value 0. Since macro X has not been defined, it is initialized with 0. So, Geeks is printed.Question 6 #include <stdio.h> #define square(x) x*x int main() { int x; x = 36/square(6); printf("%d", x); return 0; } 1360Compiler ErrorC Macro & Preprocessor Discuss itQuestion 6-Explanation: Preprocessor replaces square(6) by 6*6 and the expression becomes x = 36/6*6 and value of x is calculated as 36. Note that the macro will also fail for expressions \"x = square(6-2)\" If we want correct behavior from macro square(x), we should declare the macro as #define square(x) ((x)*(x)) Question 7Output? # include <stdio.h> # define scanf "%s Geeks Quiz " int main() { printf(scanf, scanf); return 0; } Compiler Error%s Geeks Quiz Geeks Quiz%s Geeks Quiz Geeks QuizC Macro & Preprocessor Discuss itQuestion 7-Explanation: After pre-processing phase of compilation, printf statement will become. printf(\"%s Geeks Quiz \", \"%s Geeks Quiz \"); Now you can easily guess why output is \"%s Geeks Quiz Geeks Quiz\". Question 8 #include <stdio.h> #define a 10 int main() { printf("%d ",a); #define a 50 printf("%d ",a); return 0; }Compiler Error10 5050 5010 10C Macro & Preprocessor Discuss itQuestion 8-Explanation: Preprocessor doesn\'t give any error if we redefine a preprocessor directive. It may give warning though. Preprocessor takes the most recent value before use of and put it in place of a.Question 9Output? #include<stdio.h> #define f(g,g2) g##g2 int main() { int var12 = 100; printf("%d", f(var,12)); return 0; } 100Compiler Error01C Macro & Preprocessor Discuss itQuestion 9-Explanation: The operator ## is called “Token-Pasting” or “Merge” Operator. It merges two tokens into one token. So, after preprocessing, the main function becomes as follows, and prints 100. int main() { int var12 = 100; printf(\"%d\", var12); return 0; } Question 10 Which file is generated after pre-processing of a C program? .p .i .o .m C Macro & Preprocessor 50 C Language MCQs with Answers Discuss itQuestion 10-Explanation: After the pre-processing of a C program, a .i file is generated which is passed to the compiler for compilation. 123 There are 21 questions to complete. You have completed questions question Your accuracy is Correct Wrong Partial-Credit You have not finished your quiz. If you leave this page, your progress will be lost. Correct Answer You Selected Not Attempted Final Score on Quiz Attempted Questions Correct Attempted Questions Wrong Questions Not Attempted Total Questions on Quiz Question Details Results Date Score Hint Time allowed minutes seconds Time used Answer Choice(s) Selected Question Text Need more practice! Keep trying! Not bad! Good work! Perfect! Last Updated : 28 Sep, 2023 Share your thoughts in the comments Add Your Comment Please Login to comment...