Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

dyrektywa #if

Ostatnio zmodyfikowano 2016-08-13 22:51
Autor Wiadomość
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:
C/C++
#include<iostream>
using namespace std;
int main()
{
    int x = 1;
    #if x==1
    cout << "x=1";
    #else
    cout << "x!=1";
    #endif // x
}
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:
C/C++
#include<iostream>
using namespace std;
int main()
{
    int a; // deklaracja a, bez b
    #if a==b
    cout << "true";
    #else
    cout << "else";
    #endif // x
}

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
C/C++
int x = 4;
#if x==0
cout << "abc";
to wypisze abc
HELP
P-150813
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?
P-150816
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.
P-150818
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-08-13 22:51:20
Dzięki, zamykam temat
P-150820
« 1 »
  Strona 1 z 1