📖 Scenario: You are writing a simple C program that behaves differently depending on whether it is compiled for debugging or for release. This is common in real-world software development to include extra information during development but keep the final program clean.
🎯 Goal: Build a C program that uses conditional compilation to print a debug message only when the DEBUG flag is defined.
📋 What You'll Learn
Create a macro called DEBUG to control debug messages
Use #ifdef DEBUG and #endif to conditionally compile debug code
Print a debug message only when DEBUG is defined
Print a normal message regardless of DEBUG
💡 Why This Matters
🌍 Real World
Conditional compilation is used in software development to include debug information or platform-specific code without changing the main source code.
💼 Career
Understanding conditional compilation is important for developers working on large projects, embedded systems, or cross-platform applications where different code runs in different environments.
Progress0 / 4 steps
1
Create the main function and print a normal message
Write a main function that prints "Program started" using printf.
C
Hint
Remember to include stdio.h for printf.
2
Define the DEBUG macro
Add a macro definition #define DEBUG at the top of the program before main.
C
Hint
Place #define DEBUG before the main function.
3
Add conditional compilation for debug message
Use #ifdef DEBUG and #endif inside main to print "Debug mode is ON" only when DEBUG is defined.
C
Hint
Put the debug printf between #ifdef DEBUG and #endif.
4
Print the final output
Run the program and print the output to show both messages when DEBUG is defined.
C
Hint
Compile and run the program to see both messages printed.
Practice
(1/5)
1. What does the #ifdef directive do in C conditional compilation?
easy
A. Includes the code block only if the specified macro is defined.
B. Includes the code block only if the specified macro is not defined.
C. Always includes the code block regardless of any macro.
D. Excludes the code block if the specified macro is defined.
Solution
Step 1: Understand #ifdef usage
The #ifdef directive checks if a macro is defined.
Step 2: Effect on code inclusion
If the macro is defined, the code inside the #ifdef block is included during compilation.
Final Answer:
Includes the code block only if the specified macro is defined. -> Option A
Quick Check:
#ifdef means "if defined" [OK]
Hint: Remember: #ifdef means "if defined" [OK]
Common Mistakes:
Confusing #ifdef with #ifndef
Thinking it always includes code
Assuming it excludes code if macro is defined
2. Which of the following is the correct syntax to check if a macro DEBUG is NOT defined?
easy
A. #ifdef DEBUG
B. #ifndef DEBUG
C. #if DEBUG
D. #if !DEBUG
Solution
Step 1: Identify the directive for 'not defined'
The directive #ifndef means "if not defined".
Step 2: Match with macro DEBUG
Using #ifndef DEBUG checks if DEBUG is not defined.
Final Answer:
#ifndef DEBUG -> Option B
Quick Check:
#ifndef means "if not defined" [OK]
Hint: Use #ifndef to check if macro is NOT defined [OK]
Common Mistakes:
Using #ifdef instead of #ifndef
Using #if !DEBUG which is invalid for macro existence
Confusing #if with #ifndef
3. What will be the output of this code if FEATURE is defined?
#include <stdio.h>
#define FEATURE
int main() {
#ifdef FEATURE
printf("Feature is enabled\n");
#else
printf("Feature is disabled\n");
#endif
return 0;
}
medium
A. Feature is enabled
B. Feature is disabled
C. Compilation error
D. No output
Solution
Step 1: Check if FEATURE is defined
The code has #define FEATURE, so FEATURE is defined.
Step 2: Evaluate #ifdef FEATURE block
Since FEATURE is defined, the code inside #ifdef FEATURE runs, printing "Feature is enabled".
The code opens int main() { but does not have a closing } brace.
Step 2: Verify directives and syntax
The #ifdef and #else directives are correctly used; missing #define DEBUG is not an error, just changes output.
Final Answer:
Missing closing brace for main function -> Option D
Quick Check:
Every function needs matching braces [OK]
Hint: Check all braces match in code blocks [OK]
Common Mistakes:
Assuming missing #define is an error
Thinking #ifdef usage is wrong
Ignoring missing closing brace
5. You want to compile a program that prints "Debug mode" only if the macro DEBUG is defined, otherwise it prints "Normal mode". Which code snippet correctly achieves this using conditional compilation?
hard
A. #if !DEBUG
printf("Debug mode\n");
#else
printf("Normal mode\n");
#endif
B. #ifndef DEBUG
printf("Debug mode\n");
#else
printf("Normal mode\n");
#endif
C. #ifdef DEBUG
printf("Debug mode\n");
#else
printf("Normal mode\n");
#endif
D. #if DEBUG
printf("Debug mode\n");
#else
printf("Normal mode\n");
#endif
Solution
Step 1: Understand the requirement
Print "Debug mode" only if DEBUG is defined, else print "Normal mode".
Step 2: Choose correct directive
#ifdef DEBUG checks if DEBUG is defined and includes the first print statement; #else handles the other case.