#define MSG1 0x58 #define MSG1 13 #define STR_HELPER(x) #x #define STR(x) STR_HELPER(x) #pragma message "msg1 = " STR(MSG1) #pragma message "msg2 = " STR(MSG2)
Kompiluj s melounem
středa 15. ledna 2014
Vypsání hodnoty #define preprocesorem jako #pragma message
Zapouzdření enum
Dlouhé roky jsem používal klasický enum kde před podtržítkem, jsem si držel význam toho enumu a bránil se tak i duplicitě např. NONE je velmi časté.
Ale nedávno jsem objevil nový, lepší způsob jak toto zapsat a sice..
typedef enum { QUALITY_NONE = 0, QUALITY_BAD, QUALITY_GOOD, QUALITY_EXCELENT } eQuality;
Ale nedávno jsem objevil nový, lepší způsob jak toto zapsat a sice..
struct QUALITY{ enum{NONE = 0, BAD, GOOD, EXCELENT};};Použití je potom
QUALITY::NONE
úterý 26. června 2012
čtvrtek 5. ledna 2012
pondělí 28. listopadu 2011
Dvourozměrné pole o různé délce
Mám tu pevně dané ale různé velikosti několik desítek proměnných, které potřebuju spravovat.
Umístit si je do pole, resp. pole polí je velice nešikovné, protože bych vše musel dimenzovat na největší proměnnou.
Při porovnání proměnné 1 s proměnnou 3 tímto přístupem ztrácím 13 bajtů.
Uspornější bude vytvořit si pole pointerů které ukazují na dané proměnné, ty alokuju dynamicky přesně podle definované délky.
unsigned char SIZES[] = {1,5,14,3,...};
Umístit si je do pole, resp. pole polí je velice nešikovné, protože bych vše musel dimenzovat na největší proměnnou.
unsigned char variables[N][max_size]
Při porovnání proměnné 1 s proměnnou 3 tímto přístupem ztrácím 13 bajtů.
Uspornější bude vytvořit si pole pointerů které ukazují na dané proměnné, ty alokuju dynamicky přesně podle definované délky.
unsigned char *pVariables[N]; for(i=0;i<N;i++) pVariables[i] = new unsigned char[SIZES[i]];
čtvrtek 25. srpna 2011
Python: Setřídění slovníku
Tohle je asi docela obvyklá struktura, jméno prvku a jeho paramatry.
Takže nedrží ani tvar v kterém jsme ho definovali.
řešení spočívá v převodu na list metodou items() a třídění pomocí
lambda funkce
paramater key je funkce, které se předávají prvky listu a vrací hodnotu pro abecední třízení.
dict = { "time" : {"tabName":"cas", "dbName":"time", "width":40}, "address" : {"tabName":"adresa", "dbName":"address", "width":30}, "number" : {"tabName":"cislo", "dbName":"number", "width":35} }Slovník sám o sobě je v pythonu 2.x netříditelný.
Takže nedrží ani tvar v kterém jsme ho definovali.
print dict >>> { 'address': {'width': 30, 'tabName': 'adresa', 'dbName': 'address'}, 'time' : {'width': 40, 'tabName': 'cas', 'dbName': 'time'} 'number' : {'width': 35, 'tabName': 'cislo', 'dbName': 'number'}, }
řešení spočívá v převodu na list metodou items() a třídění pomocí
lambda funkce
print sorted(dict.items(), key = lambda (k,v): (v["width"])) >>> [ ('address', {'width': 30, 'tabName': 'adresa', 'dbName':'address'}), ('number' , {'width': 35, 'tabName': 'cislo', 'dbName':'number'}), ('time' , {'width': 40, 'tabName': 'cas', 'dbName':'time'}) ]
paramater key je funkce, které se předávají prvky listu a vrací hodnotu pro abecední třízení.
C/C++: Chyba a její příčina
Chybu v následujícím kódu odhalíte snadno, ale proč je výpis při chybě takový jaký je?
Definujme typ struktura o 3 bytových položkách..
a funkci pro její naplnění
samotný kód jsem potom napsal takhle..
Funkce **getStructure()** slouží jen v výpisu a ten vypdal následovně..
00 00 00 //na začátku
11 00 00 //po zápisu do polozka1
11 22 00 //po zápisu do polozka2
55 66 BB //po zápisu do polozka3
Proč není po posledním zápisu obsah struktury 11 22 BB, tak jak jsem očekával?
Proč je tam zrovna to, co tam je?
Já myslím, že vím :D
Definujme typ struktura o 3 bytových položkách..
typedef struct { byte polozka1; byte polozka2; byte polozka3; } tStructure;
a funkci pro její naplnění
void setStructure(tStructure *p_structure){ byte a = 55; byte b = 66; getStructure(); //jen výpis p_structure->polozka1 = 11; getStructure(); //jen výpis p_structure->polozka2 = 22; getStructure(); //jen výpis p_structure->polozka3 = a + b; getStructure(); //jen výpis }
samotný kód jsem potom napsal takhle..
tStructure *p_structure; //pointer na strukturu setStructure(p_structure);
Funkce **getStructure()** slouží jen v výpisu a ten vypdal následovně..
00 00 00 //na začátku
11 00 00 //po zápisu do polozka1
11 22 00 //po zápisu do polozka2
55 66 BB //po zápisu do polozka3
Proč není po posledním zápisu obsah struktury 11 22 BB, tak jak jsem očekával?
Proč je tam zrovna to, co tam je?
Já myslím, že vím :D
Přihlásit se k odběru:
Příspěvky (Atom)