Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

O #pragma direktivama...

[es] :: C/C++ programiranje :: O #pragma direktivama...

[ Pregleda: 2232 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon O #pragma direktivama...20.01.2002. u 17:26 - pre 270 meseci
... moram priznati da nekada ne razumem neke ljude. :) Ne moze covek uvek da se 100% posveti onome sto pise, kesiranje je jedna od najglavnijih stvari za sta je #pragma koristi... Ja nisam rekao da se #pragma koristi samo za to. Ako sam rekao onda je to moja greska koja se takodje da objasniti - ja ne sedim ovde i cekam da odgovaram ljudima na pitanja. :) Odogovorim na brzaka uvek.

Elem sada da dam svoj "pogled" na #pragma direktive (mada opet isticem da to nije kompletno objasnjenje #pragma direktiva!):

Pragma direktive se koriste NAJCESCE da kontrolisu akcije kompajlera u odredjenom delu programa ali tako da ne uticu na sam program u globalu. #pragma direktive stavljamo u C++ kod onde gde zelimo da one naprave neki "uticaj" da to tako nazovem :) . #pragma direktiva utice na aplikaciju od mesta poziva nadalje za vreme kompajliranja ILI dok se ne naidje na drugu #pragma direktivu - koja AUTOMATSKI menja status prethodne!

Sintaksa je kao sto znate:
Code:
#pragma pragma-string


pragma string moze da bude:
COPYRIGHT -- da specificirate kopirajt informaciju
COPYRIGHT_DATE -- da specificirate datum za prethodno opisanu informaciju o kopirajtu
hdr_stop -- kada se koristi kesiranje raznih header-a ova "komanda" se koristi da se naznaci KRAJ "prefix header" dela programa. U datom sors fajlu ovaj header ne moze da se resetuje!
HP_SHLIB_VERSION -- Da se kreira verzija rutine iz dinamicke biblioteka.
LOCALITY -- Da se nazove tzv. "code subspace"
OPTIMIZE -- Da se ukljuci ili iskljuci optimizacija
OPT_LEVEL -- Da se setuje odredjeni nivo optimizacije
pack -- da dozvoli da maksimalni "alignment" delova klase moze da ima i non-class tipove...
VERSIONID -- Da se specificira string koji predstavlja verziju...

Kako Ivan rece, #pragma sluzi za svasta - ovo sto sam ja u prethodnim redovima naveo je samo deo #pragma direktiva... Ja ne verujem da ljudi nesto mnogo koriste #pragma direktive (zato sam i reagovao onako na pocetku, jer se #pragma najvise koristi da se naglasi koji headeri se kesiraju a koji ne - najcesce...)

PONAVLJAM: #pragma utice samo na delove programa! Ili, utice od mesta gde se pozove, pa do kraja kompajliranja!
Evo primera

Code:

g++ -O2 prog.cc

------------8<-----(prog.cc)-------
#pragma OPTIMIZE OFF
void A(){    // Iskljuci optimizaciju
    ...      // za ovu funkciju
}

#pragma OPTIMIZE ON
void B(){    // Vrati optimizaciju
    ...      // na nivo 2.
}
------------>8------------


Huh, odo da popijem nesto, tj. ne nesto nego jedan Heineken iz friza...

Pozdrav svima, a najvise pozdrava mojoj METAL bratiji sirom sveta! ;)

Dejan Lekic
dejan ? metal.org.yu
http://www.1inux.org
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Ivan Dimkovic

Administrator
Član broj: 13
Poruke: 16687
*.verat.net



+7173 Profil

icon Re: O #pragma direktivama...21.01.2002. u 19:03 - pre 270 meseci
Ja mislim da bi pragme trebalo u nacelu izbegavati, jer one dovode do nekompatibilnosti medju razlicitim kompajlerima (o arhitekturama da ne govorim ;)

Postoji nekoliko karakteristicnih situacija gde pragma moze da koristi, kao sto Leka pomenu - OPTIMIZE (ON/OFF) - neko bi se pitao zasto bi se gasila optimizacija kompajlera? Postoje odredjeni slucajevi (retki, doista, ali postoje) gde kompajler moze da pobrljavi i da generise kod sa greskama (ranije versije MSVC++ kompajlera, neke verzije GNU C kompajlera, itd..) - jedno od resenja koje se primenjuje "samo da program proradi" je iskljucivanje optimizacije preko #pragme - da bi se stigao rok, na primer - a kasnije se gleda sta i kako raditi kako bi se problem eliminisao :)

Druga primena, isto vrlo interesantna, je gasenje nekog warning-a u odredjenom fajlu - na primer, ako koristite neke automatski generisane tabele sa floating pointovima i kompajler vas casti sa bezbroj "warning - conversion from float to double, possible loss of data" - to jedan warning disable pragma na pocetku fajla resava za par sec :) Opet... bolje je to rucno izmeniti, ali ako se nema vremena...

DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos: http://www.digicortex.net/node/17 Gallery: http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! - https://github.com/psyq321/PowerMonkey
 
Odgovor na temu

[es] :: C/C++ programiranje :: O #pragma direktivama...

[ Pregleda: 2232 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.