Podwójny podkreślnik w C
Kacper - 20-09-2006 11:45
Podwójny podkreślnik w C WItam
Spotkałem się z tym już wcześniej ale w plikach bibliotek AVR GCC a teraz
także w opisach jakichś dyrektyw dla kompilatora.
O co tu chodzi? Do czego służy dlaczego się ich używa.
Teraz znalazłem to w forum EP.
Poniżej treść postu w którym wyjaśniane jest zagłębianie includów.
Gościu pisze w pierwszej części jak się nie robi i dlaczego a potem poprawia
z użyciem IFNDEF ale już z podkreślnikami.
Rafał
zrób prosze mały teścik:
potrzeba trzy pliki:
jeden.h napisał:
#include "dwa.h"
#define CONST_JEDEN 0x1234
dwa.h napisał:
#include "jeden.h"
#define CONST_DWA 0x1234
hello.c napisał:
#include "jeden.h"
#include "dwa.h"
//.....
unsigned short v1 = CONST_JEDEN;
unsigned short v2 = CONST_DWA;
gdy te pliki *.h opatrzysz wspomnianymi dyrektywami, podczas kompilacji
po pierwszym napotkaniu danego symbolu, zostanie przyjęte, że on już jest
zdefiniowany
i przy drugim wczytaniu takiego pliku *.h zostanie on przetworzony inaczej
(zawartość będzie pominięta)
ponieważ tak każą instrukcje ifndef/endif
jeden.h napisał:
#ifndef __JEDEN_H__
#define __JEDEN_H__
#include "dwa.h"
#define CONST_JEDEN 0x1234
#endif // __JEDEN_H__
dwa.h napisał:
#ifndef __DWA_H__
#define __DWA_H__
#include "jeden.h"
#define CONST_DWA 0x1234
#endif // __DWA_H__
hello.c napisał:
#include "jeden.h"
#include "dwa.h"
//.....
unsigned short v1 = CONST_JEDEN;
unsigned short v2 = CONST_DWA;
mk - 20-09-2006 12:45
Newsuser "Kacper" wrote:
> WItam
>
> Spotkałem się z tym już wcześniej ale w plikach bibliotek AVR GCC a teraz
> także w opisach jakichś dyrektyw dla kompilatora.
> O co tu chodzi? Do czego służy dlaczego się ich używa.
Dyrektywa kompilatora jest instrukcją skierowaną do kompilatora by
zachowywał się w jakiś szczególny sposób. Jaki? To już zależy od tego jaka
to dyrektywa. Np. dzięki dyrektywom można zmusić kompilator, by dla danego
fragmentu kodu kompilator nie generował ostrzeżeń w czasie kompilacji.
> Teraz znalazłem to w forum EP.
> Poniżej treść postu w którym wyjaśniane jest zagłębianie includów.
> Gościu pisze w pierwszej części jak się nie robi i dlaczego a potem
> poprawia
> z użyciem IFNDEF ale już z podkreślnikami.
Powinienieś traktować nazwę zaczynającą się od "__" jak każdą inną nazwę, z
tym że...
Użycie podwójnego podkreślenia w takim zastosowaniu jest złą praktyką!
Identyfikatory zaczynające się od dwóch podkreśleń zarezerwowane są dla
danej implementacji kompilatora. Nie należy wprowadzać nowych nazw
zaczynających się od "__", by nie doprowadzić do kolizji nazw.
pzdr
mk
zanotowane.pldoc.pisz.plpdf.pisz.plkonstruktor.keep.pl