Jeśli mamy dwa .c pliki .h oraz plik: main.c sub.c sub.h
, gdzieC: wyjaśnienie na jednostki tłumaczeniowej
main.c
#include "sub.h"
...
sub.c
#include "sub.h"
...
Możemy skompilować program za pomocą: i)
gcc -o a.out main.c sub.c
lub ii)
gcc -c main.c
gcc -c sub.c
gcc -o a.out main.o sub.o
Biorąc pod uwagę to przypadek, czy jednostka wyjściowa preprocesor jeden lub dwa tłumaczenia (s)?
Jestem zdezorientowany, ponieważ: main.c
zawiera sub.h
, co oznacza, że preprocesor wypisze jedną jednostkę kompilacji. Z drugiej strony przed utworzeniem pliku wykonywalnego tworzone są dwa pliki obiektów, main.o
i sub.o
, co pozwala mi myśleć, że "dwa pliki źródłowe, a więc dwie jednostki tłumaczeniowe".
Którą część nie rozumiem? lub gdzie popełniam błędy?