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

increment #define ili slično

[es] :: C/C++ programiranje :: increment #define ili slično

[ Pregleda: 1291 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

aleksazr
zrenjanin

Član broj: 196784
Poruke: 244
...148.91.adsl.dyn.beotel.net.



+11 Profil

icon increment #define ili slično19.05.2018. u 15:27 - pre 22 meseci
#define group 0

Recimo imam struct FOO
uint item;
uint group;

zatim imam array te struct, gde hoću da podelim zapise po grupama
const FOO foo[] = {
{.item = ... , .group = group}, // .group = 0
{.item = ... , .group = group}, // 0

group++;

{.item = ... , .group = group}, // 1
{.item = ... , .group = group}, // 1
{.item = ... , .group = group}, // 1

group++;

{.item = ... , .group = group}, // 2
{.item = ... , .group = group}, // 2
};

Ovo, naravno, ne može da se kompajlira, ali to je ono što mi treba.

Mogu .group da upisujem ručno, ali mogu pogrešiti.
Mogao bih da nekako prepravim struct i onda run-time upisujem grupu, ali onda neće biti const.

Znam da postoji __COUNTER__, ali koliko shvatam, to mi ne pomaže, counter bi se u ovom primeru završio na 6, umesto na 2.
CYRfree 2.0.5 - ako bi ćirilicu radije čitali kao latinicu.
Serbian Latin keyboard layout 12-01-2019 - raspored za većinu QWERTY tastatura sa našeg tržišta.
http://users.beotel.net/~gwh/
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 4005
178.250.138.*



+878 Profil

icon Re: increment #define ili slično19.05.2018. u 15:40 - pre 22 meseci
Ne mozes tako ni const ni non const. Nespecificirana dimenzija znaci da ce niz uzeti velicinu broja elemenata u inicijalizaciji.
Tebi zapravo treba nesto kao push_back kod vectora u C++. E sad kako C nema vektora, moraces sam to da implementiras
(ili da nadjes negde na internetu).
press any key to continue or any other to quit....
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 2797



+1146 Profil

icon Re: increment #define ili slično19.05.2018. u 15:41 - pre 22 meseci
#define je pretprocesorska direktiva. Bukvalno, pretprocesor radi MAKROZAMENU. Gde god da se pojavi "group" on stavi 0 umesto toga, pa se onda program kompajlira.
Tebi treba da je group varijabla, a ne makro.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 2797



+1146 Profil

icon Re: increment #define ili slično19.05.2018. u 15:44 - pre 22 meseci
Uzgred, UVEK postavi sekvencu koda koja može da se kompajlira (ili javlja grešku kod kompajliranja). Ako ti javlja grešku, UVEK stavi poruku o grešci koju ti daje kompajler. Možda tebi poruka o grešci ne znači ništa, onima koji bi ti pomogli, verovatno dosta kaže.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 4005
178.250.138.*



+878 Profil

icon Re: increment #define ili slično19.05.2018. u 15:59 - pre 22 meseci
On pokusava da izgenerise array[] = { {...,.group=1} ... , {...,.group=n}};
ali C preprocesor ne podrzava macro varijable.
press any key to continue or any other to quit....
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 2797



+1146 Profil

icon Re: increment #define ili slično19.05.2018. u 17:38 - pre 22 meseci
Ma vidim ja šta on pokušava. Ja pokušavam da mu kažem kako treba da radi - ako nešto ne može da se iskompajlira, napravi segment koda koji izoluje grešku, pa onda na njemu vežbaj. I ja tako radim, ako imam bag u segmentu od 1000 linija, pokušavam da napravim manji primer gde izdvojim sumnjivi deo koda, pa onda gledam šta se dešava, umesto da kompajliram ceo projekat.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 4005
178.250.138.*



+878 Profil

icon Re: increment #define ili slično19.05.2018. u 20:53 - pre 22 meseci
Da da. I da upotpunim temu, C/C++ makro nema ni petlju ni uslov niti mozes da pozivas rekurzivno sto bi bio jedan od preduslova da se ovo moze izvesti.
press any key to continue or any other to quit....
 
Odgovor na temu

aleksazr
zrenjanin

Član broj: 196784
Poruke: 244
...148.91.adsl.dyn.beotel.net.



+11 Profil

icon Re: increment #define ili slično20.05.2018. u 08:33 - pre 22 meseci
Našao sam ovde zasad najbolje rešenje

tamo gde sam vam napisao group++ mogu da upišem

#undef group
#define group 1

pa na sledećem mestu

#undef group
#define group 2... itd

Nije perfektno, i dalje može da se pogreši, ali zasad meni najbolje.
CYRfree 2.0.5 - ako bi ćirilicu radije čitali kao latinicu.
Serbian Latin keyboard layout 12-01-2019 - raspored za većinu QWERTY tastatura sa našeg tržišta.
http://users.beotel.net/~gwh/
 
Odgovor na temu

Bradzorf012
Computer programming specialist
Mile i ortaci LLC

Član broj: 334105
Poruke: 357



+832 Profil

icon Re: increment #define ili slično20.05.2018. u 08:55 - pre 22 meseci
Možda je to tebi najbolje i možda to radi, ali to nije rešenje.
 
Odgovor na temu

aleksazr
zrenjanin

Član broj: 196784
Poruke: 244
...148.91.adsl.dyn.beotel.net.



+11 Profil

icon Re: increment #define ili slično20.05.2018. u 09:45 - pre 22 meseci
A da, ne može #define group, mora GROUP, jer isto ime ima i u strukturi, pa se kompajler buni.

CYRfree 2.0.5 - ako bi ćirilicu radije čitali kao latinicu.
Serbian Latin keyboard layout 12-01-2019 - raspored za većinu QWERTY tastatura sa našeg tržišta.
http://users.beotel.net/~gwh/
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 4005
178.250.138.*



+878 Profil

icon Re: increment #define ili slično20.05.2018. u 11:22 - pre 22 meseci
Jel mozes da posaljes celo resenje kako bih naucio kako se ovo radi ;)
Koliko znam #define #undef ne mozes da ubacis u makro.
press any key to continue or any other to quit....
 
Odgovor na temu

Bradzorf012
Computer programming specialist
Mile i ortaci LLC

Član broj: 334105
Poruke: 357



+832 Profil

icon Re: increment #define ili slično20.05.2018. u 11:43 - pre 22 meseci
Umesto rešenja, bolje bi bilo da postavi problem, jer je očigledno da ne ume da ga pravilno definiše.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 4005
178.250.138.*



+878 Profil

icon Re: increment #define ili slično20.05.2018. u 11:56 - pre 22 meseci
Mislim da je ovo:
Code:

int main(void) {
    typedef struct { unsigned group; } Foo;
    const Foo foo[] = {
#undef Group
#define Group 0
        {.group = Group},
#undef Group
#define Group 1
        {.group = Group},
    };
}


E sad zasto je to bolje od toga da samo stavis .group = 0 , ... , .group = n, pitaj pisca ;)
press any key to continue or any other to quit....
 
Odgovor na temu

aleksazr
zrenjanin

Član broj: 196784
Poruke: 244
...148.91.adsl.dyn.beotel.net.



+11 Profil

icon Re: increment #define ili slično20.05.2018. u 14:00 - pre 22 meseci
E upravo je to :)

A što se tiče zašto - ideja je bila da smanjim mogućnost greške,
npr. ako copy/paste iz jedne grupe u drugu, a zaboravim da promenim broj... ovako uvek piše isto.

Ali sad i nije bitno, shvatio sam da tabelu neću praviti ručno nego programski, pa neće biti greške.
CYRfree 2.0.5 - ako bi ćirilicu radije čitali kao latinicu.
Serbian Latin keyboard layout 12-01-2019 - raspored za većinu QWERTY tastatura sa našeg tržišta.
http://users.beotel.net/~gwh/
 
Odgovor na temu

[es] :: C/C++ programiranje :: increment #define ili slično

[ Pregleda: 1291 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

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