/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
#define nogle pragmas
Fra : Troels Thomsen


Dato : 29-08-05 09:17


Jeg vil gerne lave en #definement som indeholder nogle pragmas.
Hvis nu det havde været kode havde jeg jo gjort således

#define __DISABLE_OPTIMIZER__ \
#pragma OPTION ADD "-Onf"; \
#pragma OPTION ADD "-OnB"; \
#pragma OPTION ADD "-Onbt";

- men semikolonet, eller hvad jeg ellers har prøvet, er den ikke vild med.

What to do ?

tpt



 
 
Mogens Hansen (29-08-2005)
Kommentar
Fra : Mogens Hansen


Dato : 29-08-05 11:10


"Troels Thomsen" <asdf@asdf.dk> wrote in message
news:4312c463$0$2360$edfadb0f@dread11.news.tele.dk...
>
> Jeg vil gerne lave en #definement som indeholder nogle pragmas.
> Hvis nu det havde været kode havde jeg jo gjort således
>
> #define __DISABLE_OPTIMIZER__ \

Mon ikke du mener #ifdef ?
Brug ikke __ i starten af et navn - det er forbeholdt implementeringen
(compileren)

> #pragma OPTION ADD "-Onf"; \
> #pragma OPTION ADD "-OnB"; \
> #pragma OPTION ADD "-Onbt";
>
> - men semikolonet, eller hvad jeg ellers har prøvet, er den ikke vild med.
>
> What to do ?

Drop semikolon og forsøget på at holde det som een linie.
Det direkte løsning er noget i retningen af:
#ifdef DISABLE_OPTIMIZER
#pragma OPTION ADD "-Onf"
#pragma OPTION ADD "-OnB"
#pragma OPTION ADD "-Onbt"
#endif

Men langt bedre løsning er at styre det i make filer (eller tilsvarende i
projekt opsætningen i udviklingsmiljøet IDE).
Sådanne compiler options er en egenskab ved oversættelsen i stedet for en
egenskab ved koden.
Yderligere skal man være sikker på at alle source filer i et projekt er
oversat med samme (eller som minimum kompatible) options.

Venlig hilsen

Mogens Hansen



Troels Thomsen (29-08-2005)
Kommentar
Fra : Troels Thomsen


Dato : 29-08-05 13:30


Jeg vil gerne lave en makro der indsætter x pragmaer til at disable
optimizeren for (resten af) denne fil.

Dette er nyttigt idet hc08 debuggeren nogen gange har meget svært ved at
holde styr på mappingen mellem original c kode og den genererede asm kode,
hvis optimizeren er slået (for meget) til. Compiler options håndteres på
denne platform per projekt, og kan ikke overrides i gui'et per fil.
Projektet kan ikke være i chippen (60 kb) hvis ikke optimizeren er slået
til, derfor var det lige rart med en shorthand for disse options som man så
kunne skrive i den/de få filer man vil debugge.

Det grundlæggende problem er vel at jeg skal have alle pragmaerne på én
linie hvis jeg skal kunne lave en #define, og det er compileren ikke vild
med. Mine gætterier med ';' og \n duede heller ikke
#define FOOBAR #pragma FOO \n #pragma BAR
#define FOOBAR #pragma FOO ; #pragma BAR

> Brug ikke __ i starten af et navn - det er forbeholdt implementeringen
> (compileren)

point taken

> Yderligere skal man være sikker på at alle source filer i et projekt er
> oversat med samme (eller som minimum kompatible) options.

ja, struct størrelser, memory model, etc etc.
Men disabling af optimizeren burde være sikker nok ?

tpt



Mogens Hansen (29-08-2005)
Kommentar
Fra : Mogens Hansen


Dato : 29-08-05 13:48


"Troels Thomsen" <asdf@asdf.dk> wrote in message
news:4312ffe2$0$92528$edfadb0f@dread11.news.tele.dk...
>
> Jeg vil gerne lave en makro der indsætter x pragmaer til at disable
> optimizeren for (resten af) denne fil.

Lav det med betinget compilering #ifdef, som jeg viste.
Læg det i en separat header fil, og includer det på det sted hvor du ville
skrive makroen:
#include "disable_optimization.h>

[8<8<8<]
> Projektet kan ikke være i chippen (60 kb) hvis ikke optimizeren er slået
> til,

Det lyder som et godt argument

[8<8<8<]
> Det grundlæggende problem er vel at jeg skal have alle pragmaerne på én
> linie hvis jeg skal kunne lave en #define

Er problemet at din compiler ikke kan tage flere pragmaer på een linie ?

[8<8<8<]
> ja, struct størrelser, memory model, etc etc.
> Men disabling af optimizeren burde være sikker nok ?

Så vidt jeg husker kan man i C++ få linker problemer, hvis dele at et
program forventer at inline funktioner bliver ekspanderet inline (optimeret
kode) og dele forventer at de ikke bliver ekspanderet inline (ikke optimeret
kode).
Jeg har den største respekt for at blande compiler options sammen - det kan
være vanskelligt at overskue konsekvenserne.

Venlig hilsen

Mogens Hansen



Troels Thomsen (30-08-2005)
Kommentar
Fra : Troels Thomsen


Dato : 30-08-05 08:25

>
> Læg det i en separat header fil, og includer det på det sted hvor du ville
> skrive makroen:
> #include "disable_optimization.h>

Ja !! , problem løst







Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408927
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste