Bird
Raised Fist0
Cprogramming~20 mins

Compilation process in C - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
C Compilation Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Preprocessor Directive
What will be the output when the following C code is compiled and run?
C
#include <stdio.h>
#define SQUARE(x) x * x

int main() {
    int a = 3;
    int result = SQUARE(a + 1);
    printf("%d", result);
    return 0;
}
A7
B10
C16
DCompilation error
Attempts:
2 left
💡 Hint
Remember how macros expand without parentheses.
🧠 Conceptual
intermediate
1:30remaining
Stages of Compilation
Which stage of the C compilation process converts assembly code into machine code?
ALinking
BCompilation
CAssembly
DPreprocessing
Attempts:
2 left
💡 Hint
Think about which step deals with low-level instructions.
🔧 Debug
advanced
2:00remaining
Identify the Compilation Error
What error will the compiler report for this code snippet?
C
#include <stdio.h>

int main() {
    int x = 10;
    int y = 0;
    int z = x / y;
    printf("%d", z);
    return 0;
}
ADivision by zero runtime error
BCompilation error: division by zero
CWarning: unused variable y
DNo error, prints 0
Attempts:
2 left
💡 Hint
Division by zero is not caught at compile time in C.
📝 Syntax
advanced
1:30remaining
Syntax Error in Macro Definition
Which option contains a syntax error that will cause the compiler to fail during preprocessing?
C
#define MAX(a, b) ((a) > (b) ? (a) : (b))
A#define MAX(a, b) (a > b ? a : b)
B#define MAX(a, b) ((a) > (b) ? (a) : (b)
C#define MAX(a, b) ((a) > (b) ? (a) : (b))
D#define MAX(a, b) ((a) > (b) ? (a) : (b));
Attempts:
2 left
💡 Hint
Check for balanced parentheses in macro definitions.
🚀 Application
expert
2:30remaining
Order of Compilation Steps
What is the correct order of the main compilation steps in C?
A3,2,4,1
B4,3,2,1
C2,4,3,1
D2,3,4,1
Attempts:
2 left
💡 Hint
Think about what happens first to the source code.

Practice

(1/5)
1. Which of the following is the correct order of steps in the C compilation process?
easy
A. Preprocessing, Compilation, Assembly, Linking
B. Compilation, Preprocessing, Linking, Assembly
C. Linking, Assembly, Compilation, Preprocessing
D. Assembly, Linking, Preprocessing, Compilation

Solution

  1. Step 1: Understand the compilation stages

    The C compilation process starts with preprocessing, where directives like #include are handled.
  2. Step 2: Follow the correct sequence

    After preprocessing, the code is compiled into assembly, then assembled into machine code, and finally linked to create an executable.
  3. Final Answer:

    Preprocessing, Compilation, Assembly, Linking -> Option A
  4. Quick Check:

    Compilation steps order = A [OK]
Hint: Remember: Preprocess first, then compile, assemble, and link [OK]
Common Mistakes:
  • Mixing up the order of compilation steps
  • Thinking linking happens before assembly
  • Confusing preprocessing with compilation
2. Which of the following commands runs the preprocessor only in GCC?
easy
A. gcc -o file file.c
B. gcc -c file.c
C. gcc -S file.c
D. gcc -E file.c

Solution

  1. Step 1: Identify GCC flags for compilation steps

    The flag '-E' tells GCC to run only the preprocessor and output the result.
  2. Step 2: Understand other flags

    '-c' compiles to object code, '-S' compiles to assembly, and '-o' specifies output file name.
  3. Final Answer:

    gcc -E file.c -> Option D
  4. Quick Check:

    Preprocessor only = gcc -E [OK]
Hint: Use gcc -E to run only the preprocessor [OK]
Common Mistakes:
  • Confusing -E with -c or -S
  • Using -o without understanding its purpose
  • Assuming -c runs the preprocessor only
3. What will be the output of the following commands sequence?
gcc -c file.c
gcc file.o -o program
./program
Assuming file.c contains a valid main function that prints "Hello".
medium
A. Compilation error
B. Hello
C. Linker error
D. No output

Solution

  1. Step 1: Understand the commands

    'gcc -c file.c' compiles source to object file without linking. 'gcc file.o -o program' links object file to create executable.
  2. Step 2: Run the executable

    Running './program' executes the compiled program, which prints "Hello" as per the source code.
  3. Final Answer:

    Hello -> Option B
  4. Quick Check:

    Compile, link, run = Hello output [OK]
Hint: Compile with -c, then link and run to see output [OK]
Common Mistakes:
  • Expecting output without linking
  • Confusing compile-only with full build
  • Not running the executable after linking
4. Given the code int main() { printf("Hi"); return 0; }, which error occurs if you compile with gcc file.c but forget to include #include <stdio.h>?
medium
A. Preprocessing error
B. Linker error
C. Compilation warning or error about implicit declaration
D. No error, program runs fine

Solution

  1. Step 1: Identify missing header impact

    Without #include <stdio.h>, the compiler does not know the prototype of printf, causing implicit declaration warning or error.
  2. Step 2: Understand error type

    This is a compilation warning or error, not a linker or preprocessing error.
  3. Final Answer:

    Compilation warning or error about implicit declaration -> Option C
  4. Quick Check:

    Missing stdio.h = compilation warning/error [OK]
Hint: Always include stdio.h for printf to avoid compile errors [OK]
Common Mistakes:
  • Thinking it's a linker error
  • Assuming no error occurs
  • Confusing preprocessing errors with compilation errors
5. You have two C files: main.c and utils.c. You compile them separately with gcc -c main.c and gcc -c utils.c. What is the correct command to create an executable named app linking both object files?
hard
A. gcc main.o utils.o -o app
B. gcc main.c utils.c -c -o app
C. gcc -o app main.c utils.c
D. gcc -c main.o utils.o -o app

Solution

  1. Step 1: Understand separate compilation

    Compiling with '-c' creates object files (.o) without linking.
  2. Step 2: Link object files to create executable

    Use 'gcc main.o utils.o -o app' to link object files into executable named 'app'.
  3. Final Answer:

    gcc main.o utils.o -o app -> Option A
  4. Quick Check:

    Link object files with gcc -o app [OK]
Hint: Link .o files with gcc -o executable_name [OK]
Common Mistakes:
  • Using -c flag during linking
  • Trying to compile .o files directly
  • Mixing source and object files incorrectly
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