Поклонники stdlib ругаются на мой стиль

Рейтинг: -6Ответов: 1Опубликовано: 13.06.2023

Необходимо переоформить внешний вид так - чтобы был понятен смысл функции.

#include "stdint.h"

char*  hex_char(char* tail_txt, uintptr_t value)
{
    unsigned int tmp;
    int nc = 0x577F << ((sizeof(nc)-2)*8);
    *tail_txt = 0;
    do{
        do{
            tmp = value & 0x0Fu;
            tmp -= 10;
            tmp -= tmp >> ((sizeof(tmp)*8)-3);//-?:7
            tmp += 10 + 7 + '0';
            *(--tail_txt) = tmp;
            nc <<= 1;
            value >>= 4;
        }while (value );
    }while (nc < 0);
    *(volatile char*)--tail_txt = 'x';
    *(volatile char*)--tail_txt = '0';
    return tail_txt;
};

Функция должна корректно работать на 16-32-64битных системах. https://godbolt.org/z/bnfEbaxa1

На данный момент функция принимает указатель на конец буфера и число без знака способное вместить адрес. Выдаёт указатель на первый символ строки с завершающим нулём. Результат - строка в hex формате. Очень важным условием является то, что 0xF должен быть дополнен до 0x0F, 0x12F -> 0x012F, 0x1234F -> 0x0001234F, 0x12345678F -> 0x000000012345678F. Иначе анализаторы строки сойдут сума.

Вот, нужно переоформить функцию, дописать комментарии, поменять имена переменных, да что угодно. Изменить так чтобы пояснительной записки не требовалось.

Ответы

▲ 2

Вам не кажется, что вот так код станет понятнее?

Хотя сам ваш принцип — передача конца и возврат указателя на средину блока мне ОЧЕНЬ не нравится...

char*  hex_char(char* tail_txt, uintptr_t value)
{
    *tail_txt-- = 0;
    do 
    {
        unsigned char v = value&0xFF;
        *tail_txt-- = "0123456789ABCDEF"[v&0x0F];
        *tail_txt-- = "0123456789ABCDEF"[v>>4];
    } while(value >>= 8);
    *tail_txt-- = 'x';
    *tail_txt = '0';
    return tail_txt;
};