In C each function needs a header definition and an implementation. This
also applies to OBC virtual methods. But usually the header and
implementation file for an interface contain exactly the same macro calls
except for the xxxx_BODY extension in the implementation.
Compare vehicle.h and vehicle.c as an example.
This is not very DRY
programming (DRY == Don't Repeat Yourself). If you like, you can omit the
implementation file by using the interfaceImpl.h header. Define a file
interfaceImpl.c where you include all your interface header files. Before
them include interfaceImpl.h. Then interfaceImpl.c will provide the
implementation for all virtual methods.
interfaceImpl.c
#include <../obc/interfaceImpl.h>
#include "vehicle.h"