// lib.h
#pragma once
static inline int static_inline(int x) { return x; }
inline int extern_inline(int x) { return static_inline(x); }
// lib.c
#include "lib.h"
extern inline int extern_inline(int x);
// app.c
#include "lib.h"
Ao compilar app.c, o gcc emite este aviso:
'static_inline' é estático, mas é usado na função inline 'extern_inline', que não é estática.
Por que isso é um problema? Meu raciocínio é: em app.c, se extern_inline
não for incorporado, torna-se uma chamada de função e seus detalhes de implementação (chamadas static_inline
) podem ser ignorados. Se extern_inline
for incorporado, tem a definição completa e as definições em outras unidades de tradução também podem ser ignoradas.