All streams
Search
Write a publication
Pull to refresh
214
0
gribozavr @gribozavr

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

Send message
Конечно же UB. А у статьи 40 плюсов.
Начинание хорошее, но нужно техническое ревью и редактура (в большом количестве). Пролистал несколько первых страниц.

> conio.h

Сейчас 2012 год, а вы рассказываете про conio.h?!

> Объявите в
> программе переменную max типа int и присвойте ей значение на единицу больше
> максимально допустимого.

signed overflow — undefined bahavior в Си. (Если не знаете что это такое — спросите).

> unsigned shot

shot

> Вот по-моему и все.
А как же char? (Да, об этом дальше, но вы же тут приводите список целочисленных типов и заканчиваете фразой «всё» — то есть список претендует быть исчерпывающим) А unsigned int это то же самое что unsigned или нет?

> При выводе длинных чисел
Длинные числа — это длинее двух цифр или как? (Исправьте на long)

> short j = 'b', k = 99;
> int arr[5], nums[N];
Человек впервые в жизни видит Си, а вы ему объявление с множественными деклараторами показываете (которые, кстати, запрещены многими кодстайлами, так что о них можно не рассказывать вообще, разве что в приложении «для тех что хочет знать больше»)

> Вещественные числа
> В языке C существует три типа чисел с плавающей точкой
Что такое точка и почему она плавает? Не хотите раскрывать подробности машинной арифметики — продолжайте называть их вещественными везде.

> Функция sizeof()
функция?! /0 facepalm

> mask = mask | (int)pow(2,N-i-1)
(int) pow(...) конечно, нам повезёт и всё округлится туда, куда нужно, да?

> В языке программирования C существуют так называемые статические переменные.
Вот так вот, одной фразой, смешали три разных понятия языка: object lifetime, object linkage, object scope.

Дальше не читал.
Удачи с отображением пользователю если разрежете строку посреди комбинирующей последовательности.
Я думаю что комментатор имел ввиду, что, например, буква A + combining diaresis — это два кодпоинта, но один character. Поэтому один character может состоять из произвольного количества кодпоинтов.

> порядок вычисления аргументов функции не определен, оператор «запятая» в данном месте не является точкой следования

Просто это не оператор запятая, а разделитель аргументов — две разные вещи в Си.
Хороший вопрос! Вообще думаю что не нужно.

Но если у QList или ещё чего-нибудь есть какие-то методы, расположенные внутри so библиотек, то они скомпилированы для libstdc++ и их вообще нельзя вызывать при компиляции программы с libc++, так как in-memory layout соответствующих классов в этих библиотеках разный.
Вообще-то выйдет. Просто замените этот кусок кода в qiterator.h на #include , должно сработать.
Это не проблема clang, это проблема Qt.

Qt в qiterator.h делает то, чего делать нельзя никогда (и вообще запрещено стандартом):
namespace std {
    struct bidirectional_iterator_tag;
    struct random_access_iterator_tag;
}


А в libc++ эти имена находятся в std::__1.
Я думаю в этом и проблема.
Clang точно её подхватывает? Попробуйте передать параметр -### чтобы увидеть командную строку со всеми -I опциями.
Как написал Howard Hinnant в аналогичной проблеме llvm.org/bugs/show_bug.cgi?id=12861 — у вас старая libc++.

Clang из SVN собрал этот код без проблем.
Пример, пожалуйста. Если не завести баг (я могу это сделать для вас), то оно так и останется.
> и/или знаете методы получше

Просто используйте clang для сборки всего проекта. А то у вас clang использует libc++, а gcc libstdc++. В результате в одной программе будет два STL'я (но это не проблема, libc++ на это рассчитан). А проблема будет когда вы из C++ захотите в ObjectiveC++ передать что-либо из STL.
Если вас интересует почему в конкретной реализации это может привести к сегфолту, то например потому что аллокация обычная и массивов может (и часто происходит) по-разному, а именно, аллокатор создаёт разные структуры данных вокруг пользовательского куска памяти.
Там undefined behavior будет, а не утечка.
LLVM и Clang по своей сути — кросс-компиляторы и им абсолютно всё равно какой хост.

Information

Rating
Does not participate
Location
Украина
Registered
Activity