2015-12-20 11 views
6

Natknąłem się na tę składnię i nie jestem w stanie wiedzieć, jak zacząć to rozumieć.Zrozumienie składni programowania C

Jak rozpocząć dekodowanie takiego fragmentu kodu programowania.

(*(void(*)())0)(); 

Próbowałem skompilować ten kod i skompilować go bez ostrzeżenia lub błędu. SO wydaje się być prawidłową składnią c programowania.

+3

http://cdecl.org/ – Maroun

+1

@MarounMaroun; To najlepszy przykład, w którym nie udaje się cdecl.org. – haccks

+0

@MarounMaroun wiem o tym narzędziu i próbowałem również, że pokazuje błąd składni. Próbowałem złamać ten kod w tym narzędziu, ale bez pomocy –

Odpowiedz

5

przerwa w następujący sposób:

  • (void(*)()) reprezentuje obsady 0. Tutaj jest wskaźnikiem do funkcji o typie zwracania void i może mieć dowolną liczbę argumentów.

    ( void (*) () ) 
        ^ ^^
         |  | | 
         |  | | 
         |  | | 
         |  | | 
         +  | + 
    Return type | Function 
          | 
          Pointer 
    
  • *(void(*)())0 jest dereferencing adres 0x00000000. Myślę, że jest to jego funkcja.

  • (*(void(*)())0)(); wywołanie funkcji.

+0

Aftrer czytając pięciokrotnie swoją odpowiedź, teraz wydaje mi się, że mogłem to zrozumieć .. Proszę dodać więcej tekstu aby zrozumieć to szybciej .. –

+0

pod adresem 0 jaka funkcja byłaby tam? jeśli żadna funkcja, a nie błąd segmentacji czy to, co kiedykolwiek napisano w pamięci, wykona to prawo? –

+0

@JeegarPatel; Tak. Może być kod związany z bootowaniem. – haccks