Bird
Raised Fist0
Cprogramming~20 mins

Linking multiple files in C - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Master of Linking Multiple Files
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of a program with two linked files

Given two C files linked together, what is the output when the program runs?

C
/* file1.c */
#include <stdio.h>

void greet();

int main() {
    greet();
    return 0;
}

/* file2.c */
#include <stdio.h>

void greet() {
    printf("Hello from file2!\n");
}
ARuntime error: segmentation fault
BCompilation error: undefined reference to greet
CHello from file1!
DHello from file2!
Attempts:
2 left
💡 Hint

Remember that functions declared in one file can be defined in another and linked together.

❓ Predict Output
intermediate
2:00remaining
Value of a global variable shared across files

Consider two C files sharing a global variable. What is the value printed?

C
/* file1.c */
#include <stdio.h>

extern int counter;

int main() {
    counter = 5;
    print_counter();
    return 0;
}

/* file2.c */
#include <stdio.h>

int counter = 0;

void print_counter() {
    printf("Counter: %d\n", counter);
}
ACounter: 5
BCounter: 0
CCompilation error: multiple definitions of counter
DRuntime error: uninitialized variable
Attempts:
2 left
💡 Hint

Global variables declared with extern in one file and defined in another share the same memory.

🔧 Debug
advanced
2:00remaining
Identify the linking error in multiple files

Why does this program fail to link?

C
/* file1.c */
#include <stdio.h>

void print_message();

int main() {
    print_message();
    return 0;
}

/* file2.c */
#include <stdio.h>

static void print_message() {
    printf("Hello from file2!\n");
}
ACompilation error: static function cannot be declared
BRuntime error: segmentation fault
CLinker error: undefined reference to print_message
DProgram runs and prints 'Hello from file2!'
Attempts:
2 left
💡 Hint

Think about the meaning of static for functions in C files.

📝 Syntax
advanced
2:00remaining
Correct declaration for a function defined in another file

Which option correctly declares a function defined in another file to avoid linking errors?

C
/* file1.c */
#include <stdio.h>

// Function declaration here

int main() {
    display();
    return 0;
}

/* file2.c */
#include <stdio.h>

void display() {
    printf("Display function called\n");
}
Avoid display();
Bextern void display();
Cvoid display(void);
Dstatic void display();
Attempts:
2 left
💡 Hint

Consider how to tell the compiler the function exists elsewhere.

🚀 Application
expert
3:00remaining
Number of symbols visible after linking multiple files

Given three C files below, how many functions are visible to main() after linking?

C
/* file1.c */
#include <stdio.h>

void funcA();

int main() {
    funcA();
    funcB();
    funcC();
    return 0;
}

/* file2.c */
#include <stdio.h>

void funcA() {
    printf("Function A\n");
}

static void funcB() {
    printf("Function B\n");
}

/* file3.c */
#include <stdio.h>

void funcC() {
    printf("Function C\n");
}
A2
B3
C1
D0
Attempts:
2 left
💡 Hint

Remember that static functions are only visible inside their own file.

Practice

(1/5)
1. What is the main purpose of linking multiple files in a C program?
easy
A. To organize code into separate files and combine them into one program
B. To run multiple programs at the same time
C. To convert C code into machine language
D. To write comments in different files

Solution

  1. Step 1: Understand code organization

    Linking multiple files allows splitting code into parts for better organization and reuse.
  2. Step 2: Understand linking process

    After compiling separately, linking combines these parts into one executable program.
  3. Final Answer:

    To organize code into separate files and combine them into one program -> Option A
  4. Quick Check:

    Linking = Combining files [OK]
Hint: Linking combines separate code files into one program [OK]
Common Mistakes:
  • Confusing linking with running multiple programs
  • Thinking linking converts code to machine language
  • Believing linking is for writing comments
2. Which command correctly compiles two C files main.c and utils.c together using GCC?
easy
A. gcc main.c -o program
B. gcc -o program -c main.c utils.c
C. gcc main.c utils.c -o program
D. gcc program -o main.c utils.c

Solution

  1. Step 1: Understand GCC command structure

    The correct syntax is: gcc [source files] -o [output file].
  2. Step 2: Check options order

    The standard GCC syntax is gcc [source files] -o [output], as in gcc main.c utils.c -o program.
  3. Final Answer:

    gcc main.c utils.c -o program -> Option C
  4. Quick Check:

    gcc source files -o output [OK]
Hint: Put source files first, then -o output [OK]
Common Mistakes:
  • Placing -o before source files
  • Mixing order of files and output option
  • Using output file name as source file
3. Given two files:
// file1.c
#include 
void greet() { printf("Hello from file1\n"); }

// file2.c
void greet();
int main() { greet(); return 0; }

What is the output after compiling and linking both files?
medium
A. Compilation error: greet not declared
B. Hello from file1
C. Runtime error: undefined reference to greet
D. No output

Solution

  1. Step 1: Check function declaration and definition

    file1.c defines greet() printing "Hello from file1"; file2.c declares greet() and calls it in main.
  2. Step 2: Linking files

    Compiling and linking both files connects the call to greet() with its definition, so it prints the message.
  3. Final Answer:

    Hello from file1 -> Option B
  4. Quick Check:

    Function call linked correctly = prints message [OK]
Hint: Declare functions in headers or files to link correctly [OK]
Common Mistakes:
  • Forgetting to link both files
  • Missing function declaration causing errors
  • Expecting runtime errors without linking
4. What is wrong with this setup?
// file1.c
void greet() { printf("Hi\n"); }

// file2.c
int main() { greet(); return 0; }

When compiling separately and linking, it gives an error. Why?
medium
A. Cannot compile multiple files separately
B. Missing #include in file1.c
C. main() should be in file1.c
D. greet() is not declared before use in file2.c

Solution

  1. Step 1: Check function declaration in file2.c

    file2.c calls greet() but does not declare it or include a header with its prototype.
  2. Step 2: Understand compiler error

    Without declaration, compiler errors occur because it doesn't know greet() signature.
  3. Final Answer:

    greet() is not declared before use in file2.c -> Option D
  4. Quick Check:

    Declare functions before use [OK]
Hint: Always declare functions before calling them [OK]
Common Mistakes:
  • Assuming definition is enough without declaration
  • Ignoring missing #include (not cause here)
  • Thinking main() must be in same file as greet()
5. You have three files:
// math_ops.c
int add(int a, int b) { return a + b; }

// math_ops.h
int add(int a, int b);

// main.c
#include 
#include "math_ops.h"
int main() {
  printf("Sum: %d\n", add(3, 4));
  return 0;
}

Which is the correct way to compile and link these files to produce an executable named calc?
hard
A. gcc main.c -c; gcc math_ops.c -c; gcc main.o math_ops.o -o calc
B. gcc main.c -o calc; gcc math_ops.c -o calc
C. gcc main.c math_ops.h -o calc
D. gcc main.c math_ops.c -c

Solution

  1. Step 1: Compile source files separately

    Use gcc -c to compile main.c and math_ops.c into object files main.o and math_ops.o.
  2. Step 2: Link object files

    Link main.o and math_ops.o together with gcc to create executable calc.
  3. Final Answer:

    gcc main.c -c; gcc math_ops.c -c; gcc main.o math_ops.o -o calc -> Option A
  4. Quick Check:

    Compile separately, then link object files [OK]
Hint: Compile with -c, then link object files [OK]
Common Mistakes:
  • Compiling header files directly
  • Overwriting executable by compiling twice
  • Not linking object files after compiling
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