C++ if i zmienne po przecinku

Odpowiedz Nowy wątek
2019-08-01 15:47
0

Witam wszystkich,

Czy ktoś spotkał się kiedyś z taką formą wyrażenia w funkcji if?
Wie może ktoś jak to dokładnie działa?

Przykład:

struct creature
{
    int x;
    int y;
    int z;
};

struct player
{
    int id;
    creature vbase;
};

int main()
{

    int x = 32;
    int y = 33;
    int z = 7;

    int cx = 31;
    int cy = 32;
    int cz = 7;

    creature player;

    player.x = x;
    player.y = y;
    player.z = z;

    **if ((player, cx, cy, cz + 1, 1, 1))** //-> chodzi mi o ten zapis.
    {
        return true;
    }
}

Pozostało 580 znaków

2019-08-01 15:52
2

Nie zabrakło ci nazwy funkcji przed nawiasem? Pokaż oryginał.

Pozostało 580 znaków

2019-08-01 15:55
2

W C++ występuje tzw. comma operator, który po kolei ewaluuje każde z wyrażeń i zwraca rezultat tego ostatniego:

int foo = 1;
int bar = 2;
int zar = 3;

cout << (foo, bar, zar); // wyświetli `3`

Przy czym obstawiam to samo co @szweszwe - IMO brakuje tam wywołania funkcji, ponieważ przytoczony przez Ciebie kod nie ma w aktualnej postaci żadnego sensu.


edytowany 1x, ostatnio: Patryk27, 2019-08-01 15:56
a ja przerażony usunąłem wpis :D - szweszwe 2019-08-01 15:58
dawej, przywróciłem :-P - Patryk27 2019-08-01 15:58

Pozostało 580 znaków

2019-08-01 16:05
0

A jesli tam byla funkcja to co jesli wyewaluuje sie do false :D


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110

Pozostało 580 znaków

2019-08-01 16:31
0

Właśnie nie ma odwołanie funkcji, dokładnie jest tak:


struct  TCreature 
{
    int(**_vptr_TCreature)(...);
    int posx;
    int posy;
    int posz;
};

struct TPlayer : TCreature
{
    unsigned int AccountID;
};

int main()
{
    int x = 32;
    int y = 33;
    int z = 7;
    int cx = 31;
    int cy = 32;
    int cz = 7;

    TPlayer* p;
    p->AccountID = 33;
    p->posx = x;
    p->posy = y;
    p->posz = z;

    if( (*(p->_vptr_TCreature + 3))(p, cx, cy, cz+1, 1, 0) )
    {
        return true;
    }
}

Pozostało 580 znaków

2019-08-01 16:35
0

To jest funkcja

Player dziedziczy po creature a tamten ma pole ze wskaznikiem na funkcje ;)

Inna sprawa ze to chyba nie dziala

TPlayer* p;
p->AccountID = 33;

01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110
edytowany 3x, ostatnio: stivens, 2019-08-01 16:37

Pozostało 580 znaków

2019-08-01 16:40
0

Tak w powinno być TPlayer* p = new TPlayer();, druga sprawa że nie mogę nawet go odpalić bo int(_vptr_TCreature)(...); krzyczy o na ruszczenie pamięci. więc nie rozumiem trochę tego odwołania "int(_vptr_TCreature)(...);" i jak z to działa.

Mam metodę do której przekazuje TCreature + x,y,z;

void TCreature::Go(TCreature *const player, int x, int y, int z)
{
    int v30;

    v30 = 0;

    if ( (*(player->_vptr.TCreature + 3))(player, x, y, z, 1, 0) )
        goto LABEL_20;

LABEL_20:
   v30 = -1;    

   return Move(player, -1, 0,v30);
}
edytowany 2x, ostatnio: walle, 2019-08-01 16:54
A to caly kod jaki masz? - stivens 2019-08-01 16:46

Pozostało 580 znaków

2019-08-01 16:48
0
int(**_vptr_TCreature)(...);

W tym polu musi byc zaalokowana tablica wskaznikow na funkcje
Generalnie nie jestem za dobry w C ale wyglada mi to na raka...

https://stackoverflow.com/a/5488718

Ja bym tu lambdy wrzucil jakbym juz musial czy cos


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110
edytowany 3x, ostatnio: stivens, 2019-08-01 16:52

Pozostało 580 znaków

2019-08-01 16:56
0

Dzięki za pomoc, już bynajmniej mam jakąś wskazówkę do dalszych poszukiwań

Skad ten kod jest? Czemu go analizujesz? - stivens 2019-08-01 16:59
język polski: bynajmniej != przynajmniej - vpiotr 2019-08-01 18:17

Pozostało 580 znaków

2019-08-01 16:56
1

Update:

goto LABEL_20;

Kto to Panu tak sp..apral :D


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110

Pozostało 580 znaków

2019-08-01 17:05
0

To kod ślinika gry, z roku 2002 na bazie języka C, a raczej jego zdekompilowana wersja, bo source nie zostały udostępnione a jedynie jego plik wykonywalny ELF. i aby zrozumieć jak działają pewne elementy wtłaczam się w całe rozwiązanie czysto naukowo

To by wiele tlumaczylo - stivens 2019-08-01 17:10

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0