#if pogoj

Moderator: tilz0R

#if pogoj

OdgovorNapisal/-a s54mtb » 23 Okt 2016, 18:31

Tle deluje:

Koda: Izberi vse
#define aaa 1

#if aaa == 1
  #define bbb 3
#else
  #define bbb 5
#endif



To pa seveda ne:
Koda: Izberi vse

/* tale del ni pomemben */
typedef struct
{
  uint32_t a;
  uint32_t b;
  uint32_t c;
}  mojT;

#define a1  ((mojT *) ((uint32_t)0x40000000U))
#define a2  ((mojT *) ((uint32_t)0x40000000U))
#define a3  ((mojT *) ((uint32_t)0x40000000U))
/* samo nakazuje, kako so a1, a2 in a3 definirani */

// po temle sprašujem, kako narest....
#define mojA a2

#if mojA == a1
  #define mojB 123456
#endif


kako čimbolj enostavno narest, da bi nazadnje podan #if "deloval" v primeru, ko pogoj ni številčno določen, ampak je nekaj več kot gola cifra.
Uporabniški avatar
s54mtb
 
Prispevkov: 14710
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 2183 krat
Prejel zahvalo: 6096 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: #if pogoj

OdgovorNapisal/-a peterp » 23 Okt 2016, 19:00

C preprocesor tako kompleksnih primerjav ne pozna.
Lahko pa dodatno definiraš makroje, ki imajo številčne vrednosti, nato pa le-te primerjaš?

Koda: Izberi vse
#define a1  ((mojT *) ((uint32_t)0x40000000U))
#define a2  ((mojT *) ((uint32_t)0x40000000U))
#define a3  ((mojT *) ((uint32_t)0x40000000U))
#define a1_pre 1
#define a2_pre 2
#define a3_pre 3

#define mojA a2
#define mojA_pre a2_pre

#if mojA_pre == a1_pre
  #define mojB 123456
#endif
peterp
 
Prispevkov: 1177
Pridružen: 23 Feb 2015, 14:52
Kraj: Maribor okolica
Zahvalil se je: 391 krat
Prejel zahvalo: 243 krat
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 247

Re: #if pogoj

OdgovorNapisal/-a s54mtb » 23 Okt 2016, 19:02

Kaj pa obstaja mogoče kak način, da string, ki je dan kot argument sparsa v source kodo ?
Uporabniški avatar
s54mtb
 
Prispevkov: 14710
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 2183 krat
Prejel zahvalo: 6096 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: #if pogoj

OdgovorNapisal/-a peterp » 23 Okt 2016, 19:06

s54mtb je napisal/-a:Kaj pa obstaja mogoče kak način, da string, ki je dan kot argument sparsa v source kodo ?

Tole pa mi je nerazumljivo - lahko daš primer? ;)
peterp
 
Prispevkov: 1177
Pridružen: 23 Feb 2015, 14:52
Kraj: Maribor okolica
Zahvalil se je: 391 krat
Prejel zahvalo: 243 krat
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 247

Re: #if pogoj

OdgovorNapisal/-a zanka » 23 Okt 2016, 19:09

Lahko bi šel eno stopnjo višje in sicer
Koda: Izberi vse
#define mojA_bo_A2

#ifdef mojA_bo_A1
#define mojA a1
#define mojB b1
#endif

#ifdef mojA_bo_A2
#define mojA a2
#define mojB b2
#endif
Uporabniški avatar
zanka
 
Prispevkov: 3814
Pridružen: 17 Mar 2016, 01:16
Kraj: SI-8000
Zahvalil se je: 141 krat
Prejel zahvalo: 507 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 99

Re: #if pogoj

OdgovorNapisal/-a Kroko » 24 Okt 2016, 00:39

Pa saj #define je string, ki se sparsa v source kodo. Pri tem pa si lahko pomagaš s operatorjema # in ##.
http://www.planet-cnc.com Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 6153
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 770 krat
Prejel zahvalo: 2445 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: #if pogoj

OdgovorNapisal/-a s54mtb » 24 Okt 2016, 09:15

peterp je napisal/-a:
s54mtb je napisal/-a:Kaj pa obstaja mogoče kak način, da string, ki je dan kot argument sparsa v source kodo ?

Tole pa mi je nerazumljivo - lahko daš primer? ;)


To je to:

Kroko je napisal/-a:Pa saj #define je string, ki se sparsa v source kodo. Pri tem pa si lahko pomagaš s operatorjema # in ##.
Uporabniški avatar
s54mtb
 
Prispevkov: 14710
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 2183 krat
Prejel zahvalo: 6096 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: #if pogoj

OdgovorNapisal/-a Mihec » 26 Okt 2016, 15:09

Kroko je napisal/-a:Pa saj #define je string, ki se sparsa v source kodo. Pri tem pa si lahko pomagaš s operatorjema # in ##.


Kroko, kakšen operator si mislil z "##"?
Mihec
 
Prispevkov: 59
Pridružen: 27 Maj 2015, 14:24
Zahvalil se je: 26 krat
Prejel zahvalo: 2 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 0

Re: #if pogoj

OdgovorNapisal/-a s54mtb » 26 Okt 2016, 15:24

Uporabniški avatar
s54mtb
 
Prispevkov: 14710
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 2183 krat
Prejel zahvalo: 6096 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: #if pogoj

OdgovorNapisal/-a Kroko » 26 Okt 2016, 17:18

Tu na mestu je opozorilo, da ne delajo vsi prevajalniki isto. Imel sem macro, ki je delal v Visual C++ na GCC pa ne.
http://www.planet-cnc.com Kroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 6153
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 770 krat
Prejel zahvalo: 2445 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255


Vrni se na C in sorodni jeziki

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost