Хроники Города Глупова - Какая, однако, сволочь... (или, век живи, век учись, часть 298734)
April 13th, 2004
02:43 pm

[Link]

Previous Entry Add to Memories Tell A Friend Next Entry
Какая, однако, сволочь... (или, век живи, век учись, часть 298734)

(13 comments | Leave a comment)

Comments
 
From:[info]ded_mitya@lj
Date:April 14th, 2004 - 04:44 am
(Link)
Да я разве против. Просто мой комментарий относился к форматам конад в gcc, в частности, -Wall, которая заставляет вещать компилятор о всех несоответствиях. Поскольку djpp есть ГНУ-шный вариант под ДОС, то там это могло сработать. Но применять я его не стал по указанной причине.
[User Picture]
From:[info]diamond_age@lj
Date:April 14th, 2004 - 06:13 am
(Link)
Ну хрен его знает. Может быть, gcc это действительно отлавливает -- не проверял. НО! Это не дело компилятора. В этом случае он должен знать о том, что есть такое семейство *printf, о том, для чего оно предназначено, и о том, как выглядит строка формата. Это есть грубейшее нарушение одного из основных принципов C -- отвязанности библиотек от собственно языка. Компилятор не занимается вводом/выводом и прочей херней, на это есть стандартная библиотека. НО. Хоть она и стандартная, никто не мешает мне написать собственную функцию fprintf с таким же прототипом, которая при встрече "%i" будет делать что-нибудь совсем удивительное. И это будет законно.

А еще скажу -- то, что ты дожил до жизни такой, есть следствие просчета в дизайне :) Если тебе в вычислениях нужно плавающее, а для печати результата -- целое, имело смысл вместо "%i" написать "%.0f". Во-первых, нехорошо таким образом типы смешивать; во-вторых, округление в случае чего произошло бы правильно -- (int)0.999999 дает 0 -- вряд ли это то, что тебе нужно, а printf("%.0f", 0.999999) выведет "1".
From:[info]ded_mitya@lj
Date:April 14th, 2004 - 06:31 am
(Link)
Дизайн я с 97 года переделывал раза три, каждый раз процентов на 80. Периодически добавляю новые возможности, и до сих пор работал (в этом конкретном месте) с типом long, а потом пришлось дописать некую функцию, которой нужен был double. Встал перед дилемой - либо переписывать код в 5-6 файлах, либо сделать пару-тройку кастов.
Комиссариат Культуры Powered by LJ.Rossia.org