Предположим, в bar.h
существует может существует:
static inline int fun () { return 2; }
И чтобы всегда определять fun
, foo.h
содержит следующее:
static inline int fun () { return 3; }
Вызывает ли следующее неопределенное поведение, когда bar.h
содержит определение?
#include "foo.h" /* ensure there is always a definition */
#include "bar.h" /* use the bar definition if it exists */
int main () {
/* ... */
int x = fun ();
/* ... */
С gcc (4.0.1) (старый, но это то, что у меня сейчас) поведение такое, как и ожидалось - версия foo используется, когда версия бара отсутствует, а версия бара используется, когда она существует.