No masz zupełną rację że w tym przypadku jest to problem absolutnie czysto akademicki
To co tu jest robione to przede wszystkim nie jest makro
definicja makra może wyglądać np tak:
Kod:
#define MAX(a,b) ((a>b)?a:b)
albo chociażby tak:
Kod:
#define LED_ON PORTB |= (1<<PB1)
natomiast to co stosujemy do zabezpieczania plików nagłówkowych przed ich jakby rekurencyjnym wczytywaniem to jest definiowanie NAZWY jakiejś tam stałej nazwy (definicji) na potrzeby tylko i wyłącznie preprocesora. To nigdy nie weźmie udziału kompilacji
#define ALA_I_AS
dlatego z punktu widzenia definiowania takich nazw na potrzeby zabezpieczeń plików nagłówkowych przed ich ponownym wczytywaniem do kodu - stosujemy nazwy, które ot po prostu kojarzą się z nazwą pliku ale równie dobrze mogłaby to być nazwa ALA_I_AS zamiast np IP_CONFIG_H
z tego punktu widzenia w ogóle jest nieistotne czy podkreślnik wystąpi na początku tej nazwy czy nie - to po prostu ma być nazwa - która nigdy przypadkiem nie powtórzy się w innym pliku nagłówkowych w ramach ochrony przed tym wczytywaniem. Zatem jeśli przyjmiemy zasadę że będziemy te nazwy tworzyć od nazw plików czy z podkreślinikami w środku czy na początku czy na końcu - to nie ma żadnego znaczenia.....
równie dobrze możnaby przyjąć inną chociaż dużo brzydszą zasadę że będziemy nadawać nazwy związane z godziną i sekundami gdy tworzymy taki nowy plik np:
Kod:
#ifnndef _12_33_18
tyle że to brzydko a jak widzimy nazwę związaną z nazwą pliku to od razu dla oka lepiej no się nie pomyli
---------------
natomiast to co słyszałeś z podkreślnikami - to po prostu tworząc zmienne w programie nie nadużywaj podkreślnika na pczątku ale tu chodzi raczej też o porządek i zasadę niż o strach że coś złego się stanie. Łatwo bowiem pomylić przy różnych krojach fontów/czcionek np czy dałeś jeden czy dwa podkreślniki i za chwilę tobie samemu będzie się mieszało
jeśli już używamy to dla jakichś na prawdę bardzo specyficznych celów - np gdy chcemy zachować ciągłość nazwy wskaźnika, który przekazywany jest jako argument a ma odzwierciedlać jakąś zmienną np:
Kod:
uint8_t zmienna;
void fun( uint8_t * _zmienna );
wtedy wewnątrz funkcji będę wiedział okiem że _zmienna to wskaźnik a nie jej instancja fizyczna np w obszarze zmiennych globalnych. To jest oczywiście tylko bardzo prosty poglądowy przykład a nie praktyczny.
_________________
zapraszam na blog:
http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj
Kurs EAGLE ] [ mój kanał YT TV
www.youtube.com/mirekk36 ]