Search
Write a publication
Pull to refresh
26
0.3
Cherniaev Andrei @DungeonLords

Пользователь

Send message

В языке C (и C++ тоже) существуют три различных типа: char, unsigned char и signed char.

При этом типы unsigned char и signed char предназначены для хранения чисел. "Предназначены" стоит воспринимать как "рекомендуется использовать для этих целей", фактически, программист волен в этих типах хранить и, выражаясь терминами языка Си, символы.

Когда выбрать unsigned char, а когда signed char? Нужно подумать сколько значений может принимать ваша переменная. Например, если вы храните результат ввода с клавиатуры и у вас вообще не стоит проверка на длину введенного числа, то ... То ваша программа порочна. Следует ограничивать предельную размерность всех данных. Итак, если у вас пользователь вводит
число из диапазона [0..255], тогда используйте unsigned char. Если у вас переменная может быть в диапазоне [-128..127] то используйте signed char. И так далее. Если у вас числа уже не помещаются даже в uint64_t, гуглите Длинная арифметика.

Тип char предназначен для хранения только символов. В зависимости от настроек компилятора char при компиляции транслируется или в signed char или в unsigned char. Хранение чисел в char возможно, но является признаком быдлокода.

char a = 'a'; //верно
char b = 200; //задумайтесь, может тип указать как uint8_t ?

Отдельно хочу отметить, что в 1999 году уже до всех дошло, что каждый раз писать ансигнед чар долго, очень долго. Были введены синонимы (typedef) в файле stdint.h

typedef unsigned char uint8_t;
typedef signed char int8_t;

Я рекомендую вам использовать эти синонимы вместо длинных названий сигнед чар и ансигнед чар.

К слову. Крайние значения для каждого типа хранятся в limits.h. Я напоминаю, что использование магических чисел - плохая практика. Поэтому обратите внимание на возможность написания UCHAR_MAX вместо 255 и так далее см. вики

Для тех, кто пишет код под 8-bit архитектуры (привет, atmega) но планирует в дальнейшем переход на другие платформы, обратите внимание на такие типы, как uint_least8_t...

Tags:
+1
Comments0

Тудей я впервые отредактировал файл в vim. Самое сложное что было осознать - по-умолчанию vim юзает режим, я бы назвал его режим просмотра (но он называется командный)! Обычно я открываю редактор, такой как nano, чтобы редактировать text. Редко я открываю редактор чтобы смотреть. Это контринтуитивно, что редактор открыт, а редактировать тут же нельзя - что ж это за редактор такой? А вот такой концепт.
Надо нажать в vim клавишу insert и тогда редактировать (INSERT mode). А потом опять выйти (Escape) в режим COMMAND mode и набрать уже не в файл, а команду :w -то есть сохранить. А потом :q -то есть quit.

Tags:
Rating0
Comments5

Global variable is not a field!

Глобальная переменная - это не поле для наследования ООП. Эта мысль посетила меня слишком поздно, поймите мою боль.
Я создал глобальную переменную, точнее даже глобальную переменную с локальной областью видимости (static). Эта переменная жила в методе. Я ожидал, что у каждого экземпляра класса будет свой метод (что верно) со своим экземпляром переменной (неверно).

void TClass::method(){
    static QByteArray globalVar; //will the same for all objects
}

Учите ООП, голубцы!

Total votes 8: ↑3 and ↓5-2
Comments5

Мой первый patch

Сегодня получил уведомление, что принят мой патч в Open Source продукт. Испытал большое удоволетворение проделанной работой. Моя правка совсем небольшая, я добавил ещё одну модель процессора и теперь при сборке кастомного дистрибутива Linux, в скриптах сборки buildroot можно эту модель указать, получив дистрибутив именно под этот проц заточенный. Кто ещё не пробовал собрать свой дистрибутив Linux, это весело, дерзайте!

И присылайте патчи в open source проекты. Правда! Так приятно делать знакомые инструменты лучше и делиться красотой с миром.

Total votes 11: ↑11 and ↓0+11
Comments2

Information

Rating
4,322-nd
Registered
Activity