• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

makra, programowanie w C

0 głosów
234 wizyt
pytanie zadane 23 listopada 2019 w C i C++ przez Ola Piątek Nowicjusz (240 p.)
#define MAX1 10
#define MAX2 15
#define MAX3 MAX1 - MAX2

 

int b = MAX1 - MAX3;

 

Dlaczego b wynosi  -15 skoro 10-(10-15)=15??

2 odpowiedzi

+2 głosów
odpowiedź 23 listopada 2019 przez tkz Nałogowiec (41,840 p.)
komentarz 24 listopada 2019 przez tkz Nałogowiec (41,840 p.)
Nie wiem poco jest ta wymiana zdań. Nie wiem również poco używane są argumenty ad hominem. Nie lepiej było by uzyskać rację powołując się na dokumentację lub kod potwierdzający postawioną tezę?
komentarz 24 listopada 2019 przez mmarszik Mądrala (7,370 p.)
Było by lepiej, a nawet wiele leiej, już pisałem, że byśmy mogli się obaj od siebie wiele nauczyć. Ale jak ktoś mi każe się uczyć klas, to ja mu każe się uczyć pisania funkcji.
komentarz 24 listopada 2019 przez mokrowski VIP (147,000 p.)

Jedno wystarczy...

http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines i wyszukać wystąpienie słowa macro.

komentarz 24 listopada 2019 przez mmarszik Mądrala (7,370 p.)

Gdzie na tamtej stronie są przykłady o jakich ja pisałęm czyli przykłady użycia makr z głową? Bo chyba nie ten?

// webcolors.h (third party header)
#define RED   0xFF0000
#define GREEN 0x00FF00
#define BLUE  0x0000FF

// productinfo.h
// The following define product subtypes based on color
#define RED    0
#define PURPLE 1
#define BLUE   2

 

Poza tym kompilatory rzucają warningi że makro zostało przedefiniowane.

 

 

 

komentarz 24 listopada 2019 przez mmarszik Mądrala (7,370 p.)

Jak ktoś sobie zdefiniuje w pliku cpp przykładowe makro:

#define PI 3.14

To nie widzę jakiś szczególnych zagrożeń. Pchanie czegoś takiego do plików nagłówkowych w dużym programie który korzysta z dużej ilości nagłówków (w tym z zewnętrznych bibliotek) - owszem niesie z sobą zagrozenia. Ale kompilator krzyknie że makra są nadpisywana, tego typu błędy są w miarę łatwe do wykrycia.

 

+1 głos
odpowiedź 23 listopada 2019 przez Dorion300 Szeryf (90,310 p.)
edycja 24 listopada 2019 przez Dorion300
Nie podany został żaden nawias, a więc ostatecznie po operacji preprocesora masz takie coś:

int b = 10 - 10 - 15.

Można powiedzieć że Preprocesor tak jakby wkleja dosłownie zdefiniowaną wartość do kodu.
komentarz 23 listopada 2019 przez Eryk Andrzejewski Mędrzec (163,780 p.)
Nie dla każdego musi być to od razu oczywiste.
komentarz 23 listopada 2019 przez Dorion300 Szeryf (90,310 p.)
@Eryk  Jeśli moim wpisem kogoś uraziłem to przepraszam, nie taki był cel.

Przeczytałem dokładniej i poprawiłem aby brzmiało to bardziej przyjaźniej.
komentarz 23 listopada 2019 przez Eryk Andrzejewski Mędrzec (163,780 p.)

Nie sądzę, żebyś kogoś uraził, tylko zaznaczyłem że nie dla każdego musi być oczywisty taki niuans działania preprocesora w C wink

Podobne pytania

0 głosów
1 odpowiedź 134 wizyt
pytanie zadane 14 maja 2020 w C i C++ przez Altair Nowicjusz (140 p.)
+1 głos
1 odpowiedź 340 wizyt
pytanie zadane 14 czerwca 2018 w C i C++ przez Mithriandil Początkujący (250 p.)
0 głosów
2 odpowiedzi 96 wizyt
pytanie zadane 24 maja 2017 w C i C++ przez Adam Olesiak Gaduła (3,290 p.)

86,526 zapytań

135,279 odpowiedzi

300,595 komentarzy

57,276 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...