Jaký je rozdíl mezi těmito definicemi? Obojí se zdá, že funguje stejně i výstup z kompilátoru je shodný. Díky
typedef unsigned char uint8_t ;
typedef unsigned short uint16_t;
#define uint8_t unsigned char
#define uint16_t unsigned short
Jaký je rozdíl mezi těmito definicemi? Obojí se zdá, že funguje stejně i výstup z kompilátoru je shodný. Díky
typedef unsigned char uint8_t ;
typedef unsigned short uint16_t;
#define uint8_t unsigned char
#define uint16_t unsigned short
Typedef se da schovat do namespace nebo do tridy (v C to samozrejme neni).
Makro je proste videt vsude od jeho definice a nahrazuje se ciste jako text za text. Kdyz pak nekdo udela nejake opravdu kolizni makro (jako treba max, co bylo nekde ve woknouzich hlavickach), tak se vsichni strasne divili ze jim std::max moc nefacha.
V novejsich specifikacich C++ se taky preferuje pouziti using.. tj. using uint8_t = unsigned char; nicmene tyhle typy bych neresil, jsou uz vsechny v cstdint / stdint.h
#3 KIIV
Děkuji za odpověď, náhodou sem se dostal k prostředí Keil uVision pro jednočipy 8051, kde potřebuji provést nějaké úpravy po kolegovi a zjistil sem, že tyto zkrácené tvary nefungují což mě překvapilo a narazil sem právě na ty dvě možnosti definic, tak mě zajímal rozdíl. Každopádně důvod je v tom, že Keil neobsahuje knihovnu stdint.h (cstdint.h).
programování jednočipů je jiné než klasické 8086 procesory.
bohužel budeš si muset pořídit knížku Assembler 8051.
https://www.keil.com/support/man/docs/c51/c51_library.htm
v žádném případě NEPOUZIVEJ záměnu typedef a #define protože u jednočipu je to jiné
Pokud programuje v C/C++ není znalost Assembleru nutná ani u jednočipu. Knížku? Nejlepší byl 8051 hardware manual od Atmelu (dnes Microchip). Na naučení Assembleru je nejlepší mít instrukční sadu, překladač, simulátor a chuť si s tím pohrát.
Kdysi jsem se naučil pravidlo: nikdy nezaměňuj typedef a #define, protože bramboračku mám rád na talíři, v programování nikoliv.
Na rozdíly v použíání typedef a #define jsem nenarazil ani u 8051 ani u AVR
hu
#1 Boblig
to sou věci co se řeší už desítky let
https://stackoverflow.com/questions/1666353/are-typedef-and-define-the-same-in-c
a pořád na ně padaj stejný odpovědi
https://aticleworld.com/typedef-vs-define-in-c/
https://www.codegrepper.com/code-examples/c/typedef+vs+%23define
a samozřejmě z toho vyplývaj stejný problémy
http://www.firmcodes.com/difference-between-typedef-and-define/
https://www.ritambhara.in/difference-between-typpedef-and-define/
uplně stačí do Googlu zadat heslo "typedef vs define" ...
přiznám se, že mě nikdy nenapdalo zaměňovat ty dva výrazy
vem si, že třeba v Basicu je příkaz
SELECT CASE testovanahodnota
CASE A=1
END SELECT
a přitom mezi CASE A=1 a SELECT CASE lze vložit další příkazy ale v manuálu to neni a pro určité typy překladačů to způsobí nepředvídatelné chování ... ale .... někdo to používá :)
z neuvážené záměny typedef a define vyplývaj jistá omezení a problémy
https://www.ritambhara.in/difference-between-typpedef-and-define/
v dřívějších učebnicích C pro 8048/8096 a 8051 byly detailě rozebírané i jednotlivé kroky při práci kompilátoru formou syntaktických diagramů (typicky to měl původní manál Intelu) ale teď už se to neuvádí ...
nicméně asi by se to někde na stránkách Intelu dalo dohledat ale nevim kde
když programuješ jen v céčku měl bys dodržovat standardní konvence jazyka
#7 hlucheucho
Asi úplně nutná není, ale pro práci s 8051 velmi žádoucí, protože o ASM se většinou opírajají i datasheety mnoha výrobců a pokud potřebuji rozchodit nějakou složitější perifeii, tak můžu mít problém. Kolega se takhle pokoušel rozchodit řadič externí RAM v C a nepodařilo se mu to, zatímco v ASM díky rozsáhlému examplu v Application notes ano a vlastně ani neví jak ta low level úroveň přesně funguje.
#9 Josef_H
Neni u 8051 extmem jen o tom pouzit spravne instrukce (a mit ji samozrejme spravne pripojenou), mozna jde neprimo pouzit i s normalnima instrukcema, nestudoval sem to.
Ostatne jde jen zmenou stavu jednoho pinu i prepnout na program v externi pameti od adresy 0x0000. Bez toho je k dispozici az pokud se pouzije adresa za interni pameti.
U Atmega2560 se dala externi pamet pripojit taky vcelku jednoduse, stacilo par nastaveni v registrech a udelat si pointer za interni pamet. Pokud bych do ni ale chtel ukladat i promenne nebo stack, musel bych v C upravit linker scripty a nadefinovat kolik mista tam je a tak.
No kazdopadne neni spatne se trochu rozhlednout v Asm, ale pokud clovek chce opravdu neco naprogramovat, tak je lepsi C nebo C++. Neni to zase tak moc daleko od Asm.
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku