pointer v c

Josef Štengl ok1ced na nagano.cz
Úterý Leden 6 20:50:48 CET 2015


Protože tak je to sémanticky, logicky a typově správně a je poznat co tím autor myslel. Zamezí se tak spoustě chybám.

Dotaz byl jak by to mělo být naspáno správně a ne jak si to Jarda doma patlá. Do toho mi nic není. :-D

Mimochodem není to přehlednější, na pro vás přehlednějším zápisu není mě zcela jasné co jste tím myslel. A u složitějších 
konstrukcí je to náchylné k chybám typu „to je přece jasné, u mě to funguje“. Asi tak.

Zítra mě čeká hrabání se v kódu, který by bylo dobré zrychlit. Jakmile se na něj spustí optimalizace vyšší než -O1, tak 
přestane fungovat :-(. Tak třeba proto.

Dne 6.1.2015 v 20:32 Jaroslav Buchta napsal(a):
> Tohle me vzdycky dostane, proc nenapsat radeji podle me prehlednejsi:
>
> pepromuk = DATA_EEPROM_START_ADDR + eprom_ofst;
>
> Dne 6. 1. 2015 v 20:03 Josef Štengl napsal(a):
>> /* takhle by to mělo být podle mě správně a až na jednu či dvě drobnosti snad projít i statickým analyzátorem.
>>    jen takový nástin, ten offset, jestli to je ofset, se mi jeví nějaký zbytečně dlouhý ... */
>>
>> #include <stdint.h>
>>
>> #define DATA_EEPROM_START_ADDR  (uint8_t *)0x08080000u     //4Kb 16 X 256 BYTE
>> #define LEDErezim               (uint8_t *)0x080803E0u     //L  0 led neblika 1 led blika
>>
>> void Reasetchar (uint32_t eprom_ofst)
>> {
>>   uint8_t  * pepromuk;
>>   uint8_t cis1;
>>
>>   pepromuk = &DATA_EEPROM_START_ADDR[eprom_ofst];
>>   cis1 = *pepromuk++;
>>   ...........
>>   ...........
>>   pepromuk = LEDErezim;
>>
>>   if (*ppp > 0)
>>   {
>>     cis1 |= 1;
>>   }
>> }
>>
>> Dne 6.1.2015 v 15:07 Fanda Kopriva napsal(a):
>>> Dobry den
>>> jen bych poprosil o  ujasneni.
>>>
>>>
>>> #define DATA_EEPROM_START_ADDR     0x08080000     //4Kb  16 X 256 BYTE
>>> #define  LEDErezim   0x080803E0    //L  0 led neblika 1 led blika
>>>
>>> void Reasetchar (unsigned long epromadr)
>>> {
>>> unsigned char *pepromuk;
>>> unsigned char cis1;
>>> pepromuk = DATA_EEPROM_START_ADDR + epromadr;
>>> cis1 = *pepromuk++;
>>> ...........
>>> ...........
>>> pepromuk = LEDErezim;
>>>   if (*ppp>0) cis1 |=1;
>>> }
>>>
>>> dela to co ma ,ale prekladac hlasi pro radky
>>>         pepromuk = DATA_EEPROM_START_ADDR + epromadr;
>>> a
>>>       pepromuk = LEDErezim;
>>> upozorneni
>>>                       Implicit conversion of int to ptr .
>>>
>>> Jak by to melo byt spravne.
>>>
>>> Dekuju Fanda
>>>
>>>
>>>
>>> _______________________________________________
>>> HW-list mailing list  -  sponsored by www.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
> ---
> This email has been checked for viruses by Avast antivirus software.
> http://www.avast.com
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list