Używam zestawu SDK do osadzonego projektu. W tym kodzie źródłowym znalazłem kod, który przynajmniej wydał mi się dziwny. W wielu miejscach w SDK jest kod źródłowy w tym formacie:
#define ATCI_IS_LOWER( alpha_char ) ( ( (alpha_char >= ATCI_char_a) && (alpha_char <= ATCI_char_z) ) ? 1 : 0 )
#define ATCI_IS_UPPER( alpha_char ) ( ( (alpha_char >= ATCI_CHAR_A) && (alpha_char <= ATCI_CHAR_Z) ) ? 1 : 0 )
Czy użycie tutaj operatora trójskładnikowego ma znaczenie?
Nie jest
#define FOO (1 > 0)
taki sam jak
#define BAR ( (1 > 0) ? 1 : 0)
?
Próbowałem to ocenić, używając
printf("%d", FOO == BAR);
i otrzymujemy wynik 1, więc wydaje się, że są równe. Czy istnieje powód, aby pisać kod tak, jak oni?