Bird
Raised Fist0
Cprogramming~10 mins

Why preprocessor is used - Test Your Understanding

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to include a header file using the preprocessor directive.

C
#include [1]stdio.h[2]
Drag options to blanks, or click blank then click option'
A<>
B[]
C{}
D""
Attempts:
3 left
💡 Hint
Common Mistakes
Using double quotes instead of angle brackets for standard headers.
Forgetting the #include directive.
2fill in blank
medium

Complete the code to define a constant using the preprocessor.

C
#define [1] 100
Drag options to blanks, or click blank then click option'
Aprintf
Bint
Cmain
DMAX_SIZE
Attempts:
3 left
💡 Hint
Common Mistakes
Using keywords like int or main as constant names.
Not using uppercase for constants.
3fill in blank
hard

Fix the error in the conditional compilation directive.

C
#if [1]
    printf("Debug mode\n");
#endif
Drag options to blanks, or click blank then click option'
ADEBUG = 1
Bdefined(DEBUG)
CDEBUG == 1
DDEBUG > 0
Attempts:
3 left
💡 Hint
Common Mistakes
Using assignment (=) instead of comparison (==).
Not using defined() to check macro existence.
4fill in blank
hard

Fill both blanks to create a macro that calculates the square of a number.

C
#define SQUARE([1]) ([2] * [2])
Drag options to blanks, or click blank then click option'
Ax
By
Cz
Dnum
Attempts:
3 left
💡 Hint
Common Mistakes
Using different names for the parameter in the macro body.
Forgetting parentheses around the expression.
5fill in blank
hard

Fill all three blanks to create a macro that returns the maximum of two values.

C
#define MAX([1], [2]) (([3]) > ([2]) ? ([3]) : ([2]))
Drag options to blanks, or click blank then click option'
Aa
Bb
Cx
Dy
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing parameter names in the macro body.
Not using parentheses properly.

Practice

(1/5)
1. What is the main purpose of the C preprocessor?
easy
A. To include files and define constants before compilation
B. To execute the program faster
C. To manage memory allocation
D. To handle runtime errors

Solution

  1. Step 1: Understand the role of the preprocessor

    The preprocessor runs before the compiler and handles directives like #include and #define.
  2. Step 2: Identify what the preprocessor does

    It prepares the source code by including files and defining constants, making code easier to manage.
  3. Final Answer:

    To include files and define constants before compilation -> Option A
  4. Quick Check:

    Preprocessor = include files and define constants [OK]
Hint: Preprocessor runs before compile to prepare code [OK]
Common Mistakes:
  • Confusing preprocessor with compiler
  • Thinking it manages runtime errors
  • Assuming it speeds up execution
2. Which of the following is a correct preprocessor directive in C?
easy
A. #include
B. include
C. import stdio.h
D. using namespace stdio

Solution

  1. Step 1: Recall correct syntax for including files

    The preprocessor directive to include a file starts with #include followed by the file name in angle brackets or quotes.
  2. Step 2: Check each option

    Only '#include ' uses the correct syntax for the preprocessor.
  3. Final Answer:

    #include <stdio.h> -> Option A
  4. Quick Check:

    #include syntax correct = #include [OK]
Hint: Preprocessor directives start with # [OK]
Common Mistakes:
  • Omitting the # symbol
  • Using import instead of #include
  • Confusing C++ syntax with C
3. What will be the output of this C code snippet?
#define PI 3.14
#include 
int main() {
    printf("Value of PI: %f", PI);
    return 0;
}
medium
A. Value of PI: 3
B. Value of PI: 3.14
C. Value of PI: %f
D. Compilation error

Solution

  1. Step 1: Understand #define usage

    #define PI 3.14 replaces all occurrences of PI with 3.14 before compilation.
  2. Step 2: Analyze printf output

    printf("Value of PI: %f", PI) becomes printf("Value of PI: %f", 3.14), printing the float value 3.14.
  3. Final Answer:

    Value of PI: 3.14 -> Option B
  4. Quick Check:

    #define replaces PI with 3.14 [OK]
Hint: Macros replace text before compiling [OK]
Common Mistakes:
  • Expecting %f to print literally
  • Thinking #define creates variables
  • Confusing macro replacement with runtime values
4. Identify the error in this code using preprocessor directives:
#define MAX 100
int main() {
    int arr[MAX];
    #define MAX 50
    return 0;
}
medium
A. Missing semicolon after #define
B. Array size cannot be defined by a macro
C. No error, code is correct
D. Redefining MAX without undefining causes a warning or error

Solution

  1. Step 1: Check macro redefinition rules

    Redefining a macro without first undefining it (#undef) can cause warnings or errors.
  2. Step 2: Analyze the code

    MAX is defined as 100, then redefined as 50 without #undef, which is problematic.
  3. Final Answer:

    Redefining MAX without undefining causes a warning or error -> Option D
  4. Quick Check:

    Redefine macro needs #undef first [OK]
Hint: Always #undef before redefining macros [OK]
Common Mistakes:
  • Assuming macros can be redefined freely
  • Thinking array size can't use macros
  • Missing that #define needs no semicolon
5. How can the preprocessor help in making a program portable across different operating systems?
hard
A. By automatically converting code to machine language
B. By managing memory allocation dynamically
C. By using conditional compilation to include OS-specific code
D. By optimizing runtime performance

Solution

  1. Step 1: Understand conditional compilation

    The preprocessor can include or exclude code parts using directives like #ifdef based on conditions.
  2. Step 2: Apply to portability

    This allows writing code that compiles differently on different OS by checking predefined macros.
  3. Final Answer:

    By using conditional compilation to include OS-specific code -> Option C
  4. Quick Check:

    Conditional compilation enables portability [OK]
Hint: Use #ifdef for OS-specific code blocks [OK]
Common Mistakes:
  • Thinking preprocessor converts code to machine language
  • Confusing runtime optimization with preprocessing
  • Assuming memory management is preprocessor's job
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