dyrektywa #if
Ostatnio zmodyfikowano 2016-08-13 22:51
latajacaryba Temat założony przez niniejszego użytkownika |
dyrektywa #if » 2016-08-13 21:30:47 Witam. Zajmuję się dyrektywą #if #endif #else. Mam parę pytań w zależności od kodu: #include<iostream> using namespace std; int main() { int x = 1; #if x==1 cout << "x=1"; #else cout << "x!=1"; #endif }
wynik: x jest różne od 1 :) Jak? dlaczego? Poza tym nawet nie muszę deklarować x żeby działało Ale kiedy mamy taki kod: #include<iostream> using namespace std; int main() { int a; #if a==b cout << "true"; #else cout << "else"; #endif }
tu to już w ogóle są jaja jest deklaracja tylko zmiennej "a" a wynik to i tak true. Co się dzieje? O co chodzi? W książce jest napisane, cytat: "Jaki może byc warunek? Oto kilka przykładów * #if NAZWA == NAZWA2 * #if NAZWA > 2 * #if (NAZWA_A == 2 || NAZWA_B > 10) (...)" Ale ja widzę, że preprocesor nie obchodzi, że x=1, nie. On uważa, że x=0 bo jak zmienimy int x = 4; #if x==0 cout << "abc"; to wypisze abc HELP |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-08-13 22:00:21 #define x 1 - oto odpowiedź. Przepraszam bardzo za zawracanie głowy. Nie usuwam tematu, może komuś się przyda. Ale jest jeszcze jedna kwestia:
#include<iostream> using namespace std; int main() { #define a b #if a==c cout<<"true"; #else cout<<"else"; #endif // x }
i wychodzi true. Dlaczego? |
|
pekfos |
» 2016-08-13 22:22:17 b i c to nie są wartości. To identyfikatory, a takich makr nie masz zdefiniowanych. Preprocesor podstawia pod nie 0 i oblicza wynik. 0 jest równe 0 więc masz true. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-08-13 22:51:20 Dzięki, zamykam temat |
|
« 1 » |