2012-03-25 6 views
5

Zakończyłem wstawianie wielu małych małych funkcji inline w pliku nagłówkowym, który zawieram w wielu jednostkach kompilacji, kod jest poprawnie wstawiony przez kompilator, a program działa jak zaklęcie.nagłówek pełen funkcji śródliniowych, czy mogę przenieść kod poza plik nagłówkowy i nadal wstawiać wszystko?

ale teraz plik nagłówka jest coś niezwykłego (za to, że plik nagłówka), aby uczynić go bardziej czytelnym myślałem, aby zrobić coś takiego:

#ifndef MY_HEADER_H 
#define MU_HEADER_H 

static inline 
void my_fnct (my_param a); 

#include "my_header.inline.c" 

#endif 

i plik my_header.inline.c będzie tak:

static inline 
void my_fnct (my_param a) 
{ 
    // .. my code .. 
} 

wtedy, gdy chcę te funkcje, po prostu dołączam plik nagłówkowy.

moje pytanie brzmi: czy jest lepszy sposób na osiągnięcie tego bez konieczności wypełniania pliku nagłówkowego zbyt dużą ilością kodu? lub mogę to zrobić i oczekuję, że inni programiści zrozumieją ten kod bez problemów?

+1

Na czym polega problem z wbudowanymi funkcjami w nagłówku? Funkcje inline powinny być bardzo krótkie, naprawdę liniowe. – littleadv

+1

Jeśli chodzi o wydajność kodu, jedyną rzeczą, która pozwala stwierdzić, czy ma to znaczenie, jest pomiar. Jakie jest spowolnienie kompilatora z wszystkimi zawartymi w nim materiałami? Z mojego doświadczenia wynika, że ​​takie rzeczy są pomijalne w przypadku współczesnych kompilatorów. I nie warto mieć setek opcji konfiguracyjnych, które łatwo mieszasz. –

Odpowiedz

1

Nie, nie możesz. Możesz jednak użyć funkcji optymalizacji czasu łączeń w GCC (wtedy niektóre połączenia mogą być wstawiane, nawet jeśli funkcja nie jest zadeklarowana jako inline i niedostępna w nagłówkach dla każdej jednostki kompilacji), np. kompilować i połączyć z gcc -flto (wymaga to najnowszego kompilatora GCC, np. 4.6 przynajmniej i spowalnia czas kompilacji).

1

Praktyką, której nie lubię, jest wyodrębnianie funkcji wbudowanych w osobny plik z rozszerzeniem .inl. To tylko konwencja i możesz nazwać plik, który ci się podoba. Mam IDE, który składa kod, więc mogę po prostu ukryć rzeczy, których nie chcę widzieć, zamiast mieć osobny plik.

Powiązane problemy