C Programming
C language from basics to advanced placement prep
499 Questions 10 Topics Take Test
Advertisement
Showing 1–10 of 499 questions
Q.1 Medium Preprocessor
Consider the following preprocessor directives:
#define MAX 100
#define MIN 50
#undef MAX
#define MAX 200

int main() {
printf("%d", MAX);
return 0;
}

What will be the output of this program?
A 200
B 100
C Compilation error
D 50
Correct Answer:  A. 200
EXPLANATION

The #undef directive undefines the previously defined macro MAX (which was 100). Then MAX is redefined as 200. So printf will output 200. The #undef allows redefining macros without compilation errors.

Take Test
Q.2 Medium Preprocessor
Consider this preprocessor code:
#define CONCAT(a,b) a##b
int CONCAT(var,1) = 10;
What is the actual variable name created?
A a##b
B var1
C varb
D a and b concatenated with ##
Correct Answer:  B. var1
EXPLANATION

The ## operator (token pasting) concatenates tokens directly. CONCAT(var,1) produces var1 as the variable name, not a##b.

Take Test
Q.3 Medium Preprocessor
What is the output of the following code?
#define STR(x) #x
printf(STR(Hello World));
A Hello World
B "Hello World"
C Hello World (as string)
D Error: stringification operator invalid
Correct Answer:  B. "Hello World"
EXPLANATION

The # operator (stringification) converts the macro argument into a string literal. STR(Hello World) becomes "Hello World", which printf prints with quotes.

Take Test
Q.4 Medium Preprocessor
What does the __VA_ARGS__ preprocessor feature allow in variadic macros?
A Variable number of arguments to be passed to a macro
B Automatic variable declaration
C Virtual argument passing
D Void argument handling
Correct Answer:  A. Variable number of arguments to be passed to a macro
EXPLANATION

__VA_ARGS__ allows macros to accept a variable number of arguments. Example: #define PRINT(...) printf(__VA_ARGS__) enables flexible argument passing.

Take Test
Q.5 Medium Preprocessor
Consider the following macro definition:
#define ADD(x,y) ((x)+(y))
#define MULTIPLY(x,y) ADD(x,y)*ADD(x,y)
What is MULTIPLY(2,3)?
A 25
B 36
C 30
D 35
Correct Answer:  B. 36
EXPLANATION

MULTIPLY(2,3) expands to ADD(2,3)*ADD(2,3) = ((2)+(3))*((2)+(3)) = 5*5 = 25. Wait, recalculating: (5)*(5)=25. The answer should be 25, but given options, 36=(2+3)²is if computed as (2+3)*(2+3) with y ignored. Actual answer: ((2)+(3))*((2)+(3))=5*5=25. Correcting: answer is A=25, not B.

Take Test
Advertisement
Q.6 Medium Preprocessor
What will be the preprocessed output of the following code?
#define SQUARE(x) x*x
int result = SQUARE(5+3);
A 25
B 64
C 5+3*5+3 = 23
D 15
Correct Answer:  C. 5+3*5+3 = 23
EXPLANATION

Without parentheses, SQUARE(5+3) expands to 5+3*5+3, which evaluates to 5+15+3=23 due to operator precedence, not (5+3)*(5+3)=64. This demonstrates why macro parameters need parentheses.

Take Test
Q.7 Medium Preprocessor
Consider: #define DOUBLE(x) (2*(x))
int main() { int arr[DOUBLE(5)]; ... }
What is the size of the array?
A 5 elements
B 10 elements
C Compilation error because array size must be a constant
D 20 elements
Correct Answer:  B. 10 elements
EXPLANATION

The macro DOUBLE(5) expands to (2*(5)) = 10 at preprocessing time. Array declarations require compile-time constant expressions, and macro-expanded constants qualify. The array has 10 elements. This works because the macro creates a constant expression that the compiler can evaluate.

Take Test
Q.8 Medium Preprocessor
Which statement about __VA_ARGS__ in variadic macros is CORRECT?
A It represents all arguments passed to the macro
B It requires at least one argument to be passed
C It works in C89/C90 standard
D It can be used without the three dots (...) in macro definition
Correct Answer:  A. It represents all arguments passed to the macro
EXPLANATION

__VA_ARGS__ (C99 feature) represents all variable arguments after the required parameters. It can be empty if no extra arguments are provided. It must be used with '...' in the macro definition. C89/C90 don't support variadic macros.

Take Test
Q.9 Medium Preprocessor
Consider nested macro expansion:
#define A B
#define B 5
printf("%d", A);
What is printed?
A B
B 5
C Compilation error
D Undefined behavior
Correct Answer:  B. 5
EXPLANATION

The preprocessor expands A to B in the first pass. In the second pass, it recognizes B as a macro and expands it to 5. Nested macro expansion is allowed and the final result is 5. The preprocessor performs multiple expansion passes as needed.

Take Test
Q.10 Medium Preprocessor
Which preprocessor directive is used to generate a compiler warning or error message at compile time?
A #warn and #error
B #error and #pragma message
C #error only
D #warning is the standard directive
Correct Answer:  B. #error and #pragma message
EXPLANATION

#error is standard C and generates a compilation error. #pragma message is commonly supported for warnings. #warn and #warning are non-standard. These are useful for version checking and compile-time notifications.

Take Test
IGET
iget AI
Online · Ask anything about exams
Hi! 👋 I'm your iget AI assistant.

Ask me anything about exam prep, MCQ solutions, study tips, or strategies! 🎯
UPSC strategy SSC CGL syllabus Improve aptitude NEET Biology tips