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;

Reply to
invalid unparseable
Loading thread data ...

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.

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

Reply to
mk

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.