Pull to refresh
18
0.1

Инженегр АСУТП

Send message
Как показано ниже со ссылками на первоисточники, стандарта вы тоже не знаете, как и практики.

Потому оставьте весь поучающий пафос себе.
Вот уж нет, приведение указателей на разные типы и конверсия из int это как раз даже не UB, я преувеличил — implementation defined, так написано в 6.3.2.3 пункт 5 стандарта.
5 An integer may be converted to any pointer type. Except as previously specified, the
result is implementation-defined, might not be correctly aligned, might not point to an
entity of the referenced type, and might be a trap representation.
56)

И следуя вашей логике, программы до С11, не являются программами на С.

Вот это уже называется вертеть хвостом, пытаясь апеллировать к последнему стандарту =)

Собственно, статья права — никто не знает С.
Нет. И если верить стандарту С11, надо было писать u8«Нет»
Also, in C89, functions returning int may be implicitly declared by the function call operator and function parameters of type int do not have to be declared when using old-style function definitions. (until C99)

Это из http://en.cppreference.com/w/c/language/declarations#Declarators

А про создание указателя из int, я не вижу смысла обсуждать. Конечно это UB, но иногда при работе с железом так и нужно делать. Не запрещено.
Я не знаю, в каком выдуманном мире вы живете, или как трактуете мат.часть С, но этот код прекрасно компилируется и Clang, и MSVC, и самое интересное работает так, как мне и требуется.

Не буду уточнять версии, т.к.больше чем уверен что этот код соберется любым из десятка имеющихся у меня С-компиляторов.

Это глупая дискуссия между теоретиком и практиком.
Собственно, поскольку грубую ошибку вы не заметили, а придираетесь к пуговицам, возвращаю вам «что вы пока не умеете „на глаз“ отличать „безобидные“ диагностические сообщения от серьезных ошибок, я бы посоветовал вам» =)

Поведение там определено языком С, хотя и непереносимо (только для второго ворнинга).

Кстати именно буквоедство свойственно многим новичкам — это к посту ниже по некоторых индивидуумов.
Я прекрасно понимаю как оно скомпилируется и как работает.
Например вижу ошибку выхода за границу массива в коде выше, о которой НЕТ варнинга.

И меня такое деление устраивает — error как принципиально не компилируемый код, warning- обратите внимание.

Ваши привычки не надо пытаться навязывать, даже если они могут быть полезными. Они могут оказаться ограниченными.

Например, вчера у меня после смены версии gcc, в newlib (это такая версия libc, кто не в курсе), появились варнинги (типа char применяется как индекс массива, ай-яй).

И что вы предложите мне выкинуть — платформу, gcc, newlib или %^&%##-pedantic-errors?
main()
{
	int *p = 123;
	return 6["Нет"];
}

gcc -std=c99 testc.c
testc.c:1:1: warning: return type defaults to 'int'
main()
^
testc.c: In function 'main':
testc.c:3:11: warning: initialization makes pointer from integer without a cast
int *p = 123;
^


Т.е. оба примера допустимы в С, но недопустимы в С++
Собственно, warning's не имеют никакого отношения к корректности языковых конструкций (соответствия синтаксису).
Это всего лишь дружеская необязательная помощь компилятора.
Новее -std=c90 модификация языка это уже избыточные финтифлюшки, а в C90 еще можно не объявлять тип.

Вот С++ изначально ответственнее относится к контролю типов.
Извини, я не программист. Про экономику ты начал
А не потому ли, что экономике выгоднее _продать_ еще раз зайца в новой одежке?
Я не утверждаю, что надо все писать на С, я лишь сказал, что трюки знать надо (да, пятиклассникам).

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

>на других простых языках, типа Оберона…
На Обероне и прочих языках (c#, d, rust,...) вполне себе можно писать системы — см.выше про Паскаль. Но пока что мы все пользуемся теми, что написаны на С.

>О боже мой, в мире столько архитектур, и только язык Си может покрыть их все
Да, Си есть практически везде. Потому что на нем строится все остальное.

>Жаль, что эволюции в ИТ нет, и она не отправила вас в Верхнюю Тундру
Я там был, там нефть и газ добывают. И софт там совсем не на Яве ))))
>Си гораздо более гибкий чем Паскаль, и даже турбо, и даже Дельфи.
В целом, это неверное утверждение.

>Но м.б. стоит заплатить отказом от трюков
Уже заплатили. Уже поколение, которое не знает трюков, на полном серьезе утверждает, что Ява или даже питон, быстрее чем С.
Мозгами заплатили.
И деньгами постоянно платим за непомерно жрущие ресурсы программы телефонов, телевизоров, итд
Про https://github.com/cocos2d/cocos2d-x/blob/v3/cocos/renderer/CCTexture2D.cpp#L131 очень примитивный подкол.
Это стандартное обращение, начиная с 1го класса изучения С: *pc++=c;
Да, но твоя пила, стул и ты, все написано на С =)
В этом направлении боли не видел я, кроме тривиального 3/2.

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

Это такая вариация ада для принтеров =)
На самом деле, по теме статьи можно расширить свой список «я этого не знал» на сайтике тестов http://www.quizful.net.

Так сколько то в день попыток бесплатных, хватит чтобы оценить уровень пола.
Откуда операция сравнения даст 4 ???
Все там верно

Information

Rating
3,552-nd
Location
Россия
Registered
Activity