#define v printf? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

#define v printf? – C / C++ – Fórum – Programujte.com#define v printf? – C / C++ – Fórum – Programujte.com

 

Vilik
~ Anonymní uživatel
3 příspěvky
2. 2. 2017   #1
-
0
-

#define D1     "02.02.2017"

prinf ("Datum %s\n",D1);

Tento kod bez problemu funguje a print vytisken datum 02.02.2017

Ot8azkou je jak dosahnout tehoz pokud je define bez uvozovek?

#define D2      03.02.2017

Nahlásit jako SPAM
IP: 37.220.35.–
KIIV
~ Moderátor
+43
God of flame
2. 2. 2017   #2
-
0
-

Otazkou spis je, k cemu ze ti to vlastne ma byt?

Kazdopadne zatim me nenapadlo nic, co by fungovalo. Leda tak:

#define D3(x) #x

//...

printf("%s\n", D3(12.1.1999));

Ale nevidim v tom zadny smysl.

EDIT:

tak po otevreni manualu preprocesoru precijen nejake zpusoby jsou:

#define D2 12.1.1999
#define XSTR(x) STR(x)
#define STR(x) #x

#define D2_STR XSTR(D2)

int main()
{
    printf("%s\n", D2_STR);
}
Nahlásit jako SPAM
IP: 94.113.99.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Vilik
~ Anonymní uživatel
3 příspěvky
2. 2. 2017   #3
-
0
-

#2 KIIV
Děkuji.

K čemu je to dobré?Mám ARM jádro v FPGA ,  kod je pro něj,.spousta parametru do programu je předavána v hlavičkovém souboru, který před překladem vygeneruje jiny program podle aktualniho stavu systemu nebo zařizenim na kterém to pak cele jede. Hlavičkový soubor je poměrně rozsáhlý a vlastně určuje jak , z čeho a s jakými daty se přeloží vysledny program. Program, generující onen hlavičkovy soubor jsem dokonce psal ja v roce 2015, bohužel jsem u par #define zapomněl generovat "" typicky u toho datumu , ktere je retezcem i kdyz vypada jako cislo :-) Původně tam tyto #define byly jen kvůli čitelnosti a přehlednosti, nicméně ted jsme jich pár potřebovat kvůli přehlednosti dostat i do samotného přeloženého kodu a narazil an problem na který jsem se ptal.

Možna by šlo upravit program generjici hlabičkovy soubor, ale v mezičase ho začali použíbat kolegové na jine věci jako například k předávání parametru do matlabu a změna struktury hlavičkového souboru  by mohla být problem a chcui se ji raději vyhnout

Nahlásit jako SPAM
IP: 89.144.12.–
hans
~ Anonymní uživatel
34 příspěvků
3. 2. 2017   #4
-
0
-

#2 KIIV
Prozdadíte , kde se takove věci daji nastudovat?
 Uz 10 minut se snažim nanjit manual v kterém by byly jednotlivé makra trochu podobněji rozpitvána a jediné co jsme našel je https://gcc.gnu.org/….1.0/cpp.pdf

kde je to uvedeno jako příklad, ale co které makro děla a proč to děla už ne a tak jsme znaten.

Nahlásit jako SPAM
IP: 84.53.232.–
KIIV
~ Moderátor
+43
God of flame
3. 2. 2017   #5
-
0
-

#4 hans
To je presne ono, sekce Stringification.

Ja jsem zkousel puvodne:

#define D2 12.1.1999
#define STR(x) #x

printf("%s\n", STR(D2)); // vytisklo: D2

Pak az jsem se na to mrkl a pouzil to druhe makro:   XSTR(x) STR(x)

No a co to dela? # udela z parametru makra retezec (ale ne z jineho makra). Problem je, ze parametr makra se bere tak jak je.

Napriklad   SQR(X) X*X   ->  SQR(1-8)  se nahradi za:  1-8*1-8

A v XSTR se to zda se nahradi vsechno. Mozna je to tam i nekde vysvetlene v sekci 3.3 Macro Arguments

Nahlásit jako SPAM
IP: 212.47.3.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Hans
~ Anonymní uživatel
34 příspěvků
3. 2. 2017   #6
-
0
-

To jsme našli to same, mě jen přišlo, že jde jen o příklad složeného viceurovnového makra a někde najdu manual s  popisem jednotlivých častí . jak to funguje v tomto případě mi z příkladu došlo,ale že bych to uměl použít jink poskládné a zcela pochopil to tak uplně ne.

Jsme občas natvredlý  a bez podroběnšjho popisu s příkldy se neobejdu :-)

robl=ém mám hlavně s preprocesorem, například jsme zatím nevypatral zda se dá nějak změnit format datupu kompilace vracenoho __DATE: z Feb 3 2017 na evropsky 3 Feb 2017

Nahlásit jako SPAM
IP: 163.172.170.–
KIIV
~ Moderátor
+43
God of flame
3. 2. 2017   #7
-
0
-

#6 Hans
Co se tyce __date__ ve vlastnim formatu, tak bych si to radsi vygeneroval v Makefile a pak to podsoupl jako definici makra pro prekladac.
 Neco jako:

gcc -D "D2_STR=\"`date --iso-8601=seconds`\"" test.c # -> "2017-02-03T17:15:17+0100"

gcc -D "D2_STR=\"`date --iso-8601`\"" test.c # -> "2017-02-03"
Nahlásit jako SPAM
IP: 94.113.99.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 101 hostů

Podobná vlákna

Printf vs. cout — založil volnaduse

Printf a SDL — založil sin_x

#define v cyklu — založil Merik

Printf v hexi soustave — založil Keyzio

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý