Constantine
все стартовые коды особенные, а ASCII однобайтово
Anatoly
bom в utf8?
https://stackoverflow.com/questions/2223882/whats-different-between-utf-8-and-utf-8-without-bom
Constantine
https://stackoverflow.com/questions/2223882/whats-different-between-utf-8-and-utf-8-without-bom
я не вижу как отсутствие bom мешает читать utf8 файл
Aidar
все стартовые коды особенные, а ASCII однобайтово
Стартовые, тоесть так всё-таки нельзя и ты можешь заменить не стартовый
Ivan
ну, если его конвертили откуда-то (откуда ошибка?) то он нужен
Anatoly
я не вижу как отсутствие bom мешает читать utf8 файл
никак, но тем не менее, даже в каких-то редакторах есть вставка BOM даже в UTF-8
Ivan
хотя да, конечно, свойство сохранится, с этим я поторопился
Constantine
Стартовые, тоесть так всё-таки нельзя и ты можешь заменить не стартовый
Ты берешь UTF8, ты правильно прочитаешь все кодпоинты, в которых не было ошибок
Aidar
Ты берешь UTF8, ты правильно прочитаешь все кодпоинты, в которых не было ошибок
Вопрос был могу ли я заменить ремлейсом чар и не поесть говна
Aidar
Ответ нет
Constantine
т.е. ошибка будет касаться только символов, в которых ошибка
Constantine
не байтов, а символов
Constantine
вопрос: можно ли реплейсом заменять ASCII диапазон? ответ: да
Constantine
вопрос: можно ли реплейсом заменять utf8 последовательность на utf8 последовательность? ответ: да
Александр
Это круто. Спасибо. Я знал про некоторые свойства утфа, но не про это
Constantine
оно легко доказывается
Constantine
первый байт явно указывает длину
Constantine
и такой байт никогда не встречается не первым в кодпоинте
Constantine
т.е. если правильная utf8 подстрока встречается в utf8 строке, то границы символов не могут не совпасть
Max
UB? struct delist_t* list = (delist_t*)std::malloc(sizeof *list);
Constantine
почему бы?
Max
*list - разыменование
Constantine
sizeof невычисляющий контекст
ttldtor
а зачем так?)
Max
нашел кодец одного dm.
Max
sizeof невычисляющий контекст
не понял. все равное идет же derefferencing, разве нет?
Constantine
не понял. все равное идет же derefferencing, разве нет?
нет, потому что на самом деле происходит только вычисление типа результата
Constantine
int x[10]; sizeof (x[100]); //ok
Igor
не понял. все равное идет же derefferencing, разве нет?
The operand is either an expression, which is not evaluated, or a parenthesized type-id.
Max
вау, прикольно
Constantine
и да, просьба уточнять, речь о С или С++
Max
там же std::
Constantine
хм...
Anonymous
Constantine
они чем то отличаются ?
домашнее задание: написать программу, которая не содержит макросов, компилируется на С и С++ и выводит, какой язык
Constantine
там же std::
но там же еще struct
Max
ну блин, солянка)
Constantine
malloc в C++ это не очень best practices
Matwey
В новый стандарт емнип добавили шаблон в глобальный неймспейс
Constantine
С функцией abs особенно весело
Я не специалист по С, помню только пример через 'a'
Matwey
И теперь abs(3.15) возвращает 3.15, а не 3 как в C
Ignat
Я не специалист по С, помню только пример через 'a'
ну это какой-то implementation dependent способ
Constantine
забавно
Matwey
А что за пример через 'a'?
Constantine
тип 'a' в С это int
Ignat
он не полагается на то, что sizeof(int) != 1 на твоей платформе?
Constantine
а, действительно
Constantine
в С же есть overloaded functions :)
Constantine
всегда можно тип спросить через overload resolution
Roman
И теперь abs(3.15) возвращает 3.15, а не 3 как в C
Использовать fabs религия не позволяет?
Ignat
в С же есть overloaded functions :)
ну в крестах-то нет
Ignat
ну то есть как раз перегруженные функции есть в крестах, но суть ясна
Ignat
extern int T; int size(void) { struct T { int i; int j; }; return sizeof(T); /* C: return sizeof(int) * C++: return sizeof(struct T) */ }
Ignat
такое выглядит понадёжнее
Matwey
Использовать fabs религия не позволяет?
В шаблонном коде fabs особенно удобно!
Roman
там же о с
Roman
домашнее задание: написать программу, которая не содержит макросов, компилируется на С и С++ и выводит, какой язык
#include <stdio.h> int main(int argc, char *argv[]){ int s = sizeof('a'); if(s == 1){ printf("C++"); }else{ printf("C"); } return 0; }
Oleg
а не, все норм
Roman
Символьный литерал в Си имеет тип int. По стандарту тип int должен именть разрядность обеспечивающую хранения диапазона минимум от -32768 32767 т.е. минимум 2 байта.
Roman
— minimum value for an object of type int INT_MIN -32767 // −(215 − 1)
Roman
А тип char?
Aninteger constant expression117) shall have integer type and shall only have operands that are integer constants, enumeration constants, character constants, sizeof expressions whose results are integer constants, and floating constants that are the immediate operands of casts. Cast operators in an integer constant expression shall only convert arithmetic types to integer types, except as part of an operand to the sizeof operator.
Roman
А в плюсах character constants это char
Constantine
Вы не ответили на вопрос
Roman
а тип char?
Constantine
Да, какие ограничения наложены на тип char?
Roman
в с++?
Constantine
Что они запрещают типу char иметь диапазон значений -32768 32767?
Constantine
в С или С++
Aidar
я почти знаю
Aidar
минимум 256 различимых значений
Дмитрий ⬡
Да, какие ограничения наложены на тип char?
В тип чар должны поместиться 8 бит, sizeof == 1
Aidar
а еще вроде явно минимум 8 бит
Aidar
а еще sizeof==1 но это уже языковые фичи(языковой байт)
Constantine
в с++?
подсказка: Андрей Александреску уверен, что sizeof(int) может быть равен 1 в стандарте С++98