[Podstawy C] Inicjalizacja zmiennych CHAR wartością zależną od #define

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
Witam!!

    Pytanie dotyczy podstaw C, ale do zastosowania w GCC dla AVRów ;)...

Chodzi mi o przypisanie "startowej" wartości dla tablich charow...

Zapis typu:
unsigned char[] = "ABC1";
działa poprawnie... jeśli chcę zastąpić znak '1' *znakiem* *o* *kodzie*
1 zrobię to tak:
unsigned char[] = "ABC/1";
i też wszystko będzie działało!! Mogę nawet zrobić tak:
unsigned char[] = "ABC"  "/1";
i też będzie dobrze... ale ponieważ ta wartość /1 się zmieniać może w
poszczególnych kompilacjach, chciałbym to zrobić tak:

#define MOJ_ZNAK 1
unsigned char[] = "ABC .....
i właśnie - jak dokończyć tę linię aby wstawić w nią znak o kodzie 1
używając słowa MOJ_ZNAK? Tak, aby zmiania definicji zmieniła też
zawartość tej zmiennej... Próbowałem tak:
unsigned char[] = "ABC" MOJ_ZNAK
ale niestety nie działa... różnych cudów próbowałem i nic...

Zastosowanie - znaki specjalne na wyświetlaczu LCD.

Przepraszam, za pytanie trochę OT i bardzo bardzo nie na poziomie... ale
nie potrafię spytać googla tak, aby odpowiedział właściwie :(... dostaję
z reguły odpowiedzi na poziomie przypisania "ABC1" itp... przypomnieć
sobie też nie potrafię, metoda prób i błędów także nie zdała egzaminu.
Boję się, że to jakaś przypadłość GCC, dlatego wolę tutaj zapytać :)...
a może w ogóle się tego nie da zrobić??

Pozdrawiam
Konop

Re: [Podstawy C] Inicjalizacja zmiennych CHAR wartością zależną od #define
In the darkest hour on Sat, 31 Oct 2009 02:50:00 +0100,
Quoted text here. Click to load it

Najprościej #define MOJ_ZNAK "1"

Quoted text here. Click to load it

Teraz zadziała.

--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:238B ]
[ 07:50:27 user up 12242 days, 19:45,  1 user, load average: 0.99, 0.98, 0.40 ]

We've slightly trimmed the long signature. Click to see the full one.
Re: [Podstawy C] Inicjalizacja zmiennych CHAR wartością zależną od #define
Quoted text here. Click to load it

Racja, dzięki za uwagi. Tego nie sprawdzałem z innego względu... część
znakĂłw uĹźywam w ten sposĂłb:
unsigned char ch;

ch = MOJ_ZNAK;

No i teraz to już nie działa :(... czyli wychodzi na to, że i tak muszę
mieć dwa define'y ;)... jeden do wstawiania do napisów, drugi do użycia
jako pojedynczy znak. Czy da się to może jakoś pogodzić??

Pozdrawiam
Konop

Re: [Podstawy C] Inicjalizacja z miennych CHAR wartością zależn ą od #define

Quoted text here. Click to load it

A moĹźe tak:
#define ZNAK 1
char txt[]=;

P.G.


Re: [Podstawy C] Inicjalizacja zmiennych CHAR wartością zależną od #define
Piotr Gałka pisze:
Quoted text here. Click to load it

Fakt, tak działa :).. Dzięki za informację, na pewno się przyda czasami
:) tyle tylko, że trochę upierdliwie się to wpisuje, bo każdy znak
trzeba w osobnym ' '... i o to mi właśnie chodzi - czy da się połączyć "
" z ' ' ?? Bo jak chcę zrobić parę napisów, z których każdy ma
kilkanaście, bądź kilkadziesiąt znaków i w środku wstawić jeden znak
specjalny, to już wolę zrobić to tak:

#define MOJ_ZNAK ''
#define MOJ_ZNAK_INIT ""

unsigned char txt[] = "Jakis tekst" MOJ_ZNAK_INIT "inny tekst";
unsigned char ch;
ch = MOJ_ZNAK;

Pozdrawiam
Konop

Re: [Podstawy C] Inicjalizacja zmiennych CHAR wartością zależną od #define
Konop pisze:

Quoted text here. Click to load it

Wykorzystaj operator # zamieniający identyfikator na ciąg znaków.
Zobacz w helpie do języka C (a dokładniej mówiąc do preprocesora).

--
Adam Dybkowski
        http://dybkowski.net /

We've slightly trimmed the long signature. Click to see the full one.
Re: [Podstawy C] Inicjalizacja zmiennych CHAR wartością zależną od #define
Adam Dybkowski pisze:

Quoted text here. Click to load it

# mu nie pomoże, bo on chce mieć znak o kodzie 1, a nie 1 ascii (0x31).


Re: [Podstawy C] Inicjalizacja zmiennych CHAR wartością zależną od #define
Zbych pisze:
Quoted text here. Click to load it

Ehhh, a ja ambitnie sam chciałem dojść do tego jak użyć tego #... no ale
nic mi nie wyszło ;)... efekt był taki, jakiego można się było
spodziewać - zamiast znaku numer 1 uzyskalem napis MOJ_ZNAK na LCD ;)...

Pozdrawiam
Konop

Re: [Podstawy C] Inicjalizacja z miennych CHAR wartością zależn ą od #define
Quoted text here. Click to load it

Da się.

Masz

#define MOJ_ZNAK ""

I możesz potem zrobić tak:

ch = MOJ_ZNAK[0];

Zwróć uwagę że zapis "/1" w języku C oznacza faktycznie tablicę
typu "const char[2]". Pierwszym znakiem jest /1 a drugim zero (ASCIIZ).
Zapis ch = MOJ_ZNAK[0]; preprocesor rozwinie według Twojego #define
i kompilator to zobaczy jako:

ch = "/1"[0];

i nie powinien mieć problemów, mimo iż to może dziwnie wyglądać :-)

Zaletą takiego rozwiązania jest pojedynczy #define.


Re: [Podstawy C] Inicjalizacja zmie nnych CHAR wartością zależną od #defi ne
Konop pisze:

Quoted text here. Click to load it

Ukośnik powinien być w drugą stronę.

Quoted text here. Click to load it

#define MOJ_ZNAK ""

char aqq[] = "ABC" MOJ_ZNAK;

Re: [Podstawy C] Inicjalizacja zmiennych CHAR wartością zależną od #define
In the darkest hour on Sat, 31 Oct 2009 11:51:42 +0100,
Quoted text here. Click to load it

Przy okazji, trochę to niebezpieczne... Za chwilkę może chcieć dodać
cokolwiek po i okaże się, że od czasu do czasu trafi na to miejsce
jakaś cyfra.

Lepiej od razu:

#define MOJ_ZNAK "\x01"

--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:230B ]
[ 12:16:57 user up 12242 days,  0:11,  1 user, load average: 0.99, 0.98, 0.40 ]

We've slightly trimmed the long signature. Click to see the full one.
Re: [Podstawy C] Inicjalizacja zmiennych CHAR wartością zależną od #define
Artur M. Piwko pisze:

Quoted text here. Click to load it

Nie ma takiej potrzeby jeśli teksty są rozdzielone cudzysłowami.

Re: [Podstawy C] Inicjalizacja zmiennych CHAR wartością zależną od #define
In the darkest hour on Sat, 31 Oct 2009 14:29:00 +0100,
Quoted text here. Click to load it

Jest, jeśli będzie chciał dać w tym #define. Może nie w tym przypadku,
ale jeśli tego typu regułę zastosuje później w innym miejscu.

--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:232B ]
[ 08:07:26 user up 12244 days, 20:02,  1 user, load average: 0.90, 0.98, 0.59 ]

We've slightly trimmed the long signature. Click to see the full one.

Site Timeline