Bird
Raised Fist0
Cprogramming~10 mins

Conditional compilation - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Conditional compilation
Start
↓
Check #ifdef or #ifndef
↓
Compile block
↓
Continue compilation
↓
End
The compiler checks if a condition is true (#ifdef/#ifndef). If yes, it compiles the code block; if no, it skips it and continues.
Execution Sample
C
#define DEBUG
#ifdef DEBUG
printf("Debug mode on\n");
#endif
printf("Program running\n");
This code prints a debug message only if DEBUG is defined, then always prints 'Program running'.
Execution Table
StepDirectiveConditionResultActionOutput
1#define DEBUGN/ADEBUG definedDefine DEBUG macro
2#ifdef DEBUGIs DEBUG defined?YesCompile next block
3printf("Debug mode on\n");N/AN/AExecute printDebug mode on
4#endifN/AEnd ifEnd conditional block
5printf("Program running\n");N/AN/AExecute printProgram running
6EndN/AN/AProgram ends
💡 Reached end of code, all directives processed.
Variable Tracker
MacroStartAfter Step 1Final
DEBUGundefineddefineddefined
Key Moments - 2 Insights
Why does the code inside #ifdef DEBUG run only sometimes?
Because the code inside #ifdef DEBUG runs only if the macro DEBUG is defined (see execution_table step 2). If DEBUG is not defined, that block is skipped.
What happens if we remove #define DEBUG at the start?
The condition at step 2 becomes false, so the debug print is skipped and only 'Program running' prints (see execution_table step 2 and 3).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the output at step 3?
ANo output
BProgram running
CDebug mode on
DCompilation error
💡 Hint
Check the Output column at step 3 in the execution_table.
At which step does the compiler decide to skip or compile the debug print?
AStep 1
BStep 2
CStep 4
DStep 5
💡 Hint
Look at the Condition and Result columns in execution_table step 2.
If #define DEBUG is removed, what changes in the execution?
AThe debug print is skipped
BThe program will not compile
CBoth prints run
DOnly debug print runs
💡 Hint
Refer to key_moments explanation and execution_table step 2.
Concept Snapshot
#ifdef MACRO
  // code compiles only if MACRO is defined
#endif

#ifndef MACRO
  // code compiles only if MACRO is NOT defined
#endif

Use #define MACRO to define macros.
Conditional compilation controls which code is included before compiling.
Full Transcript
Conditional compilation in C uses directives like #ifdef and #ifndef to include or exclude code blocks based on whether a macro is defined. The compiler checks these conditions before compiling. For example, if DEBUG is defined with #define DEBUG, then code inside #ifdef DEBUG runs; otherwise, it is skipped. This lets you include debug messages or platform-specific code without changing the main program. The execution table shows each step: defining macros, checking conditions, compiling or skipping code, and printing output. Understanding when code runs or is skipped helps avoid confusion and bugs.

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

  1. Step 1: Understand #ifdef usage

    The #ifdef directive checks if a macro is defined.
  2. Step 2: Effect on code inclusion

    If the macro is defined, the code inside the #ifdef block is included during compilation.
  3. Final Answer:

    Includes the code block only if the specified macro is defined. -> Option A
  4. 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

  1. Step 1: Identify the directive for 'not defined'

    The directive #ifndef means "if not defined".
  2. Step 2: Match with macro DEBUG

    Using #ifndef DEBUG checks if DEBUG is not defined.
  3. Final Answer:

    #ifndef DEBUG -> Option B
  4. 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

  1. Step 1: Check if FEATURE is defined

    The code has #define FEATURE, so FEATURE is defined.
  2. Step 2: Evaluate #ifdef FEATURE block

    Since FEATURE is defined, the code inside #ifdef FEATURE runs, printing "Feature is enabled".
  3. Final Answer:

    Feature is enabled -> Option A
  4. Quick Check:

    Defined macro triggers #ifdef block [OK]
Hint: If macro defined, #ifdef block runs [OK]
Common Mistakes:
  • Ignoring the #define line
  • Thinking #else block runs
  • Assuming compilation error due to macro
4. Identify the error in this code snippet:
#include <stdio.h>

int main() {
#ifdef DEBUG
    printf("Debug mode\n");
#else
    printf("Release mode\n");
#endif
    return 0;
}
medium
A. printf statements are invalid
B. Incorrect use of #ifdef directive
C. Missing #define DEBUG before #ifdef
D. Missing closing brace for main function

Solution

  1. Step 1: Check code structure

    The code opens int main() { but does not have a closing } brace.
  2. Step 2: Verify directives and syntax

    The #ifdef and #else directives are correctly used; missing #define DEBUG is not an error, just changes output.
  3. Final Answer:

    Missing closing brace for main function -> Option D
  4. 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

  1. Step 1: Understand the requirement

    Print "Debug mode" only if DEBUG is defined, else print "Normal mode".
  2. Step 2: Choose correct directive

    #ifdef DEBUG checks if DEBUG is defined and includes the first print statement; #else handles the other case.
  3. Final Answer:

    #ifdef DEBUG printf("Debug mode\n"); #else printf("Normal mode\n"); #endif -> Option C
  4. Quick Check:

    Use #ifdef for defined macro check [OK]
Hint: Use #ifdef for defined, #else for else [OK]
Common Mistakes:
  • Using #ifndef which reverses logic
  • Using #if DEBUG without macro value
  • Using #if !DEBUG which is invalid
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard