Bird
Raised Fist0
Cprogramming~10 mins

Linking multiple files in C - Interactive Code Practice

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

Complete the code to include the header file utils.h in main.c.

C
#include [1]

int main() {
    print_message();
    return 0;
}
Drag options to blanks, or click blank then click option'
A"utils.h"
B<utils.h>
C"utils.c"
D<stdio.h>
Attempts:
3 left
💡 Hint
Common Mistakes
Using angle brackets instead of double quotes for user headers.
Including the source file instead of the header file.
2fill in blank
medium

Complete the code to declare the function print_message in utils.h.

C
void [1]();
Drag options to blanks, or click blank then click option'
AprintMessage
Bprint
Cmessage_print
Dprint_message
Attempts:
3 left
💡 Hint
Common Mistakes
Using a different function name than the one defined.
Misspelling the function name.
3fill in blank
hard

Fix the error in the function definition in utils.c by completing the function name.

C
void [1]() {
    printf("Hello from utils!\n");
}
Drag options to blanks, or click blank then click option'
Aprint_message
Bmessage_print
Cprint
DprintMessage
Attempts:
3 left
💡 Hint
Common Mistakes
Using a different function name in the definition.
Incorrect capitalization in the function name.
4fill in blank
hard

Fill both blanks to complete the Makefile rule to compile main.o from main.c.

C
main.o: [1] utils.h
	[2] -c main.c
Drag options to blanks, or click blank then click option'
Amain.c
Bgcc
Cclang
Dmain.h
Attempts:
3 left
💡 Hint
Common Mistakes
Using the header file as the source dependency.
Using the wrong compiler command.
5fill in blank
hard

Fill all three blanks to complete the Makefile rule to link main.o and utils.o into the executable app.

C
app: main.o utils.o
	[1] [2] [3] -o app
Drag options to blanks, or click blank then click option'
Agcc
Bmain.o
Cutils.o
Dclang
Attempts:
3 left
💡 Hint
Common Mistakes
Forgetting to include all object files.
Using the wrong compiler command for linking.

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