Problém s datovým typem bool a bit – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s datovým typem bool a bit – C / C++ – Fórum – Programujte.comProblém s datovým typem bool a bit – C / C++ – Fórum – Programujte.com

 

marpit0
Stálý člen
30. 5. 2013   #1
-
0
-

Zdravím, 

při hraní v MPLabu jsem si všiml zajímavé věci, kterou zatím ne a ne pochopit. Nastíním situaci, mám boolovskou hodnotu a funkci, která vrací boolovskou hodnotu. Nástin hlavičkového souboru tedy vypadá takto. 

bool test;
bool t();

Zde je datový typ bool znám a je i zvýrazněn jako datový typ. Datový typ bit však v hlavičkovém souboru znám není. Pokud doplníme:

bit tt;

Kompilátor se nám ozve s hláškou Unable to resolve identifier bit. OK, smažme tedy zde nově přidaný řádek a přejděme k samotnému souboru s kódem. 

Proměnnou typu bool test můžeme bez problému použít, ALE jakmile například chceme nadefinovat vně funkce jinou bool proměnnou, obdržíme od kompilátoru varování ve smyslu Unable to resolve identifier bool. Větší paradox však přichází při definici funkce t: 

#include "header.h"

bool t()
{
    return test;
}

Už při hlavičce funkce na nás IDE varovně křičí, že datový typ nezná, jak tedy dál? Pokud by byl návratovým typem bit, v c souboru to sice projde, avšak chybu bude hlásit v hlavičkovém souboru, ve kterém bit nezná. 

Máte s tímto někdo nějakou zkušenost? Já vcelku už nevím, co si o tomto mám myslet a například funkce vracející bitovou (boolovou) hodnotu by se mi celkem hodily. 

PS: nemám v plánu (respektive chtěl bych se vyhnout) konstrukcím typu, vracet 1 nebo 0 v unsigned charu, případně struktuře bit (bool) proměnných a podobným řešením. 

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
Sefiros0
Návštěvník
30. 5. 2013   #2
-
0
-

Hoj,

v C++ neexistuje datový typ bit...pokud potřebuješ poslat více true/false příznaků v jedné entitě, použij bitovou masku.

Nahlásit jako SPAM
IP: 80.188.252.–
marpit0
Stálý člen
30. 5. 2013   #3
-
0
-

Bavíme se o C pro PIC, víc zmínka o MPLabu hned v první větě, kde datový typ bit je definován (jak je to s bool, to netuším), zarážející je spíše to, že v některých částech bit (bool) bez problému projde, ale o kousek dál už kompilátor protestuje. 

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
Sefiros0
Návštěvník
30. 5. 2013   #4
-
0
-

jo...moje chyba

Nahlásit jako SPAM
IP: 80.188.252.–
ingiraxo+15
Grafoman
30. 5. 2013   #5
-
0
-

#1 marpit
můžu se zeptat, proč se ti nelíbí konstrukce unsigned char pro ten dat. typ bit ?

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
KIIV
~ Moderátor
+43
God of flame
30. 5. 2013   #6
-
0
-

v x51 Cecku je bit primo mapovanej do bitove pameti (da se k ni prisputpovat specialnima instrukcema po bitech nebo normalnima instrukcema k celejm bajtum). Bool je pak v normalni pameti a vetsinou zabira celej bajt

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
marpit0
Stálý člen
30. 5. 2013   #7
-
0
-

#5 ingiraxo
chtěl bych co nejefektivněji využít paměť. 

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
marpit0
Stálý člen
30. 5. 2013   #8
-
0
-

#6 KIIV
Takže pokud to dobře chápu, nelze si s bit provádět to, co s klasickými datovými typy, které se ukládají v normální paměti. 

Díky za odpověď, měl jsem za to, že něco podobného půjde a i na internetu jsem našel nejrůznější zdrojáky, které s bool  nebo bit pracovaly úplně normálně. 

Stejně je ale zajímavé, že bit může být pouze jako globální proměnná. 

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
KIIV
~ Moderátor
+43
God of flame
30. 5. 2013   #9
-
0
-

pro pic to muze byt neco jinyho .. nejsem si jist jestli to ma bitovy pole tak jako x51... ale pak to opravdu zabiralo jedinej bit :D

kdyztak je furt moznost pouzit bitovy operace a cele bajty jako 8bitu

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
marpit0
Stálý člen
30. 5. 2013   #10
-
0
-

#9 KIIV
Mě napadlo něco takového:  

#define true 1;
#define false 0;

typedef union
{
    unsigned char boolean:1;
} boolean;
Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
vitamin+8
Grafoman
30. 5. 2013   #11
-
0
-

#10 marpit
Niesom si isty, ale podla mna tu uniu zarovna na 1B.

Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
marpit0
Stálý člen
30. 5. 2013   #12
-
0
-

#11 vitamin
Teď ověřeno v MPLabu, zabralo to jen jeden bit   . Škoda jen té složité syntaxe, lituji, že nejde typedef unsigned char:1 boolean.

Nahlásit jako SPAM
IP: 78.102.62.–
MarPit
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, 53 hostů

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ý