» »

[visual c++] #ifdef _DEBUG

[visual c++] #ifdef _DEBUG

fogl ::

Kaj pomeni koda, ki jo visual c++ posatvi v vsak .cpp fajl:

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

Pri prevajanju mi je ven metal ene čudne errorje, ki mi niso bli jasni od kod, potem pa sem zbrisal ta del kode, je blo pa vse ok...:\
lp, klemen

Vesoljc ::

komande ki se začnejo z # so takoimenovani preprocesor-ski ukazi. namreč, preden se prevajalnik loti prevajanja kode, izvede nad njo še en "tekstni masaker" (makroti).

recimo:
#define velikost 100
int polje[velikost];


ko preprocesor obavi svoje delo, koda izgleda tako:
int polje[100];


#ifdef 
#endif 

to pa je pogojni stavek za preprocesor, le-ta se izvede samo enkrat ob prevjajanju (compile time) in ne vedno tako kot navaden if stavaek (run time).

za tvoj primer pa gre to nekako tako: ko nastaviš debug konfiguracijo v VC-ju, se prevajalniku poda parameter _DEBUG (ali DEBUG), kar je isto kot da bi rekli:
#define _DEBUG


prva vrstica torej preveri, če je omenjeni "izraz" definiran, vkolikor je, operatorju new "pripišemo" vrednost DEBUG_NEW. čemu? hja, verjetno ima tale DEBUG_NEW vgrajeno funkcionalnost, ki ti omogoča spremljanje, kaj za vraga se dogaja s pomnilnikom, ko uporabljaš new/delete. undef preprosto "ugasne" nek izraz:
#define BLAK
#ifdef BLAK
   // koda tu notri se bo izvedla
#endif

#undef BLAK
#ifdef BLAK
   // koda tu notri se ne bo izvedla
#endif


static char THIS_FILE[] = __FILE__;

__FILE__ je predefirniran makro, ki ti ob prevajanju vrne ime datoteke, v kateri se nahaja. static char [] pa preprosto naredi char polje, tako da to lahko uporabis kar znotraj programa:
#include <iostream>
#include <stdlib.h>

using namespace std;

static char THIS_FILE[] = __FILE__;

int main(int argc, char *argv[])
{
    cout << THIS_FILE << endl;
    system("PAUSE");	
    return 0;
}

zelo uporabno pri izpisu napak...

endif pa le konča zgoraj začeti if stavek...

go google za "c++ macro", "c++ preprocessor", itd...
recimo
Abnormal behavior of abnormal brain makes me normal...

Zgodovina sprememb…

  • spremenil: Vesoljc ()

fogl ::

Ampak še vedno mi pa ni jasno, zakaj bi bil lahko ta del kode vzrok za napake ki mi jih je javljal?
lp, klemen

Vesoljc ::

kaj ti je pa javljal?
Abnormal behavior of abnormal brain makes me normal...

fogl ::

Zdej sem pa ta del spet vključil, je pa vse ok, čudno 8-O
lp, klemen

Vesoljc ::

ob čudnih težavah najprej probaj rebuild 8-)
Abnormal behavior of abnormal brain makes me normal...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[baze] Povezava do slike ali BLOB?

Oddelek: Programiranje
101399 (1196) BlueRunner
»

[C++] Preverjanje ce je program dos ali win32

Oddelek: Programiranje
211201 (857) BigWhale
»

[C++] preprosto risanje

Oddelek: Programiranje
71390 (1267) popec
»

[C] parse error

Oddelek: Programiranje
11867 (802) ql000
»

[C/C++] unsigned long lala = -1;

Oddelek: Programiranje
5958 (917) Vesoljc

Več podobnih tem