Обнуление структуры

это должно быть так же естественно, как дышать - скопировал строку, добавил ноль в конце

1 лайк

Пипец!!!

Ну напиши как на Си (без plus plus):

struct a {
  int b;
  float c;
}

void clear_a (struct a &pt) {
  pt.b = 0;
  pt.c = 0.0;
}

Что мешает так сделать???

Обьясните на пальцах плиз
чем

uint8_t kod=0;
	uint8_t nn=0;
	uint8_t oldnn=0;
	uint8_t pages=0;
	uint8_t oldpages=0;
	uint8_t stat=0;
    uint8_t buff_alf=0;
    uint16_t XX=0;
	uint16_t YY=0;
	uint16_t XXOLD=0;
	uint16_t YYOLD=0;
  char text_buf[0]='\0';
 char oldtextbuf[0]='\0';

лучше , чем

memset(&my_touch,0x00,sizeof(my_touch)); ?
динамические поля не использую … и вызывается в разных местах…

незнание :face_exhaling: Спасибо , сейчас попробую разобраться…

Почитай:

Он прынципиально пишет на “честном”. А там нету методов :frowning:

Это как?

Ссылков в “честном” тоже нет, если чё :frowning:

Ой, да ладно! А автор прям “Воин Света” :slight_smile:

(а может, автора и вправду “Света” зовут? тогда извиняюсь :slight_smile: )

Решил таки почитать, что ж там такого тёмного он нашёл, после отпишусь. Хотя, после первой фразы:

В языке Си повсеместно используется memset(), таящий в себе множество ловушек. Выдержка из C++ Reference

не уверен, что смогу дочитать до конца.

Это какого же он («честный») года? В stm32cubeide ссылки есть, я поэтому так и написал.

Да и как ТС тогда в memset объект передает? :smiley:

memset(&my_touch,0x00,sizeof(my_touch));

Видимо пишет не на совсем «честном» )))

А нужно ли? :smiley:

23-го – ISO/IEC 9899:2024

Не уверен.

Так Вы ссылки с указателями путаете. Тогда понятно, что в stm32cubeide есть.

А разве

void my_clear(void){
 uint8_t kod=0;
	uint8_t nn=0;
	uint8_t oldnn=0;
	uint8_t pages=0;
	uint8_t oldpages=0;
	uint8_t stat=0;
    uint8_t buff_alf=0;
    uint16_t XX=0;
	uint16_t YY=0;
	uint16_t XXOLD=0;
	uint16_t YYOLD=0;
  char text_buf[0]='\0';
 char oldtextbuf[0]='\0';
}

my_clear();

не тоже самое ? смысл то был избавиться от обнуления ручками каждой переменной :smile:
или я неправильно понял ?

я вроде грабли у мемсет проверил если компилятор не менять вроде ни на что не наткнусь . и да, я ее не только здесь использую :frowning:

void clear_a (struct a &pt) в последней версии не работает

ну, да, ну, да…

Знаете такую притчу: “Зарекалась свинья дерьмо не есть, идёт, а оно лежит ….” :slight_smile:

И не должно, если Вы на Си пишете. Это плюс-плюсовая фича.

Если не сложно , можете указать на что еще обратить внимание? Я активно пользуюсь memset,strcpy,strcmp…
про указатель и sizeof , проверил …

Это ему @karasik_mk1 голову заморочил своим &my_touch

1 лайк

поменяйте ссылку на указатель - заработает

Сложно, реально сложно. Там граблей много – минное поле. Причём на некоторые и не подумаешь, что человек может так ошибиться.

понял… спасибо …

Зато надёжно и предсказуемо. Тут вон страсти какие пишут, без бутылки не разобраться. А косяки неуловимые исправлять потом, так ваще спиться можно.