Podwójny podkreślnik w C

Sep 20, 2006 1 Replies

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;


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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required