avva: (Default)
[personal profile] avva

Одна из важных побед программиста над собой - победить в себе человека, который склонен написать что-то вроде

#define DOLLAR_SIGN '$'

Date: 2006-10-15 08:06 pm (UTC)
From: [identity profile] dimrub.livejournal.com
Я поддерживал некоторое время код, в котором были следующие дефайны:

#define LT <
#define EQ ==

и т.п. Человек с фортрана, что-ли, перешел.

Только не мой моск

Date: 2006-10-15 08:16 pm (UTC)
From: [identity profile] dimrub.livejournal.com
Ну зачем же вот так, на ночь глядя???

Date: 2006-10-15 08:45 pm (UTC)
From: [identity profile] aburachil.livejournal.com
Сильно! Особенно понравилась последняя строчка.

Date: 2006-10-17 08:14 pm (UTC)
From: [identity profile] syarzhuk.livejournal.com
а чем она плоха?

Date: 2006-10-17 10:26 pm (UTC)
From: [identity profile] aburachil.livejournal.com
Ну как, сколько будет MAX(++a,b-=1) ?

Date: 2006-10-17 11:23 pm (UTC)
From: [identity profile] syarzhuk.livejournal.com
а-а, вспомнил
ужасный язык, ужасный препроцессор, ужасные программисты...

Re: или с Алгола

Date: 2006-10-15 09:01 pm (UTC)
From: [identity profile] kouzdra.livejournal.com
Почему с Алгола? Там как раз очень любили всякие хитрые значки. На АЦПУ нашегошкольного Минск-22 для Алгола были специальные символы - стрелочка вверх (возведение в степень), подстрочная 10 (для плавающих констант) etc. Не говоря уж о больше/меньше.

Re: или с Алгола

Date: 2006-10-15 09:25 pm (UTC)
stas: (Default)
From: [personal profile] stas
Вики говорит, что Борн это сделал для того, чтобы его C больше напоминал Алгол, над компилятором которого он работал. Это не значит, конечно, что это правда, но выглядит правдоподобно.

Re: или с Алгола

Date: 2006-10-16 06:06 am (UTC)
From: [identity profile] kouzdra.livejournal.com
Борн действительно стилизовал С под Алгол-68. Я когда-то по схожим причинам сделал тоже самое. Но как раз LT/GT/etc - это не алгольское.

с фортрана

Date: 2006-10-15 08:40 pm (UTC)
From: [identity profile] aburachil.livejournal.com
Зря Вы так фортран обижаете, там есть специальный оператор для поддерживающих программы:

The primary purpose of the DATA statement is to give names to constants;
instead of referring to pi as 3.141592653589793 at every appearance, the
variable PI can be given that value with a DATA statement and used instead of
the longer form of the constant. This also simplifies modifying the program,
should the value of pi change.
-- FORTRAN manual for Xerox Computers

Re: с фортрана

Date: 2006-10-15 08:41 pm (UTC)
From: [identity profile] dimrub.livejournal.com
Ага, например - в условиях военного времени.

Date: 2006-10-15 08:43 pm (UTC)
From: [identity profile] aburachil.livejournal.com
Так вроде фортран и был изначально на случай войны изобретён

Re: с фортрана

Date: 2006-10-17 08:18 pm (UTC)
From: [identity profile] syarzhuk.livejournal.com
http://syarzhuk.livejournal.com/346249.html

Nice joke

Date: 2006-10-16 06:40 am (UTC)
From: [identity profile] aburachil.livejournal.com
(c) /usr/bin/fortune ;-)

Date: 2006-10-15 08:09 pm (UTC)
From: [identity profile] jsn.livejournal.com
да, кажется, кто-то рассказывал про биллинг, что ли, в котором параметры тарифных планов были дефайнами, а количество секунд в сутках было заинлайнено во многих местах (как 24 * 60 * 60).

Date: 2006-10-15 08:15 pm (UTC)
From: [identity profile] breqwas.livejournal.com
Ну, писать что-то типа SECONDS_IN_DAY - это однозначно правильнее, чем 86400, а разницы между #define SECONDS_IN_DAY 86400 и #define SECONDS_IN_DAY (24*60*60) уж точно нет.

Date: 2006-10-15 08:24 pm (UTC)
From: [identity profile] anna-tw.livejournal.com
есть разница, если, конечно, не помнить это число наизусть. В случае 24*60*60, никому не придет в голову тратить время на проверку, а не ошибся ли чувак, написавший 86400

Date: 2006-10-16 03:01 am (UTC)
From: [identity profile] pulkin.livejournal.com
Неправда ваша, мне вот 86400 ближе, а про 24*60*60 я несколько секунд думал что это вообще такое.

Date: 2006-10-16 04:36 am (UTC)
From: [identity profile] anna-tw.livejournal.com
и в чем же моя неправда? (хинт - в первом предложении "неправды" есть if :))

Date: 2006-10-16 10:24 am (UTC)
From: [identity profile] pulkin.livejournal.com
Уговорили, ваша правда, мое исключение подтвердило правило :-)

Date: 2006-10-15 09:21 pm (UTC)
From: [identity profile] jsn.livejournal.com
заинлайнено == много мест типа if (seconds_since >= 24 * 60 * 60).

Date: 2006-10-15 09:24 pm (UTC)
From: [identity profile] breqwas.livejournal.com
Эээ... А скобки в дейфайне поставить? Стандартная же ситуация.

Date: 2006-10-15 11:02 pm (UTC)
From: [identity profile] jsn.livejournal.com
(три коммента на объяснение одного слова -- многовато)

где Вы в приведённом куске кода, конкретно, видите define?

Date: 2006-10-15 09:40 pm (UTC)
From: [identity profile] caseq.livejournal.com
Лично я не вижу в этом ничего страшного, (24 * 60 * 60) читается не менее self-descirptive чем SECONDS_IN_DAY. Другое дело, что возникают проблемы с портабельностью -- на планетах, где в сутках другое количество секунд.

Date: 2006-10-15 11:04 pm (UTC)
From: [identity profile] jsn.livejournal.com
ээ, ну ты правда хочешь, чтобы я высказался вслух на тему того, что опечатка в пятом из десяти (24 * 60 * 6) [например] не поймается компилятором и т.д.?

(here, i said it. happy now? :)

Date: 2006-10-16 06:05 am (UTC)
From: [identity profile] averros.livejournal.com
Да... проблема с планетами, факт.

Ни одна программа, в которой написано что-то вроде #define SECS_IN_DAY (24*60*60), строго говоря, не подходит для планеты Земля. Просто потому что в стандартной системе исчисления времени на Земле бывают дни, в которых 86401 секунда:

http://en.wikipedia.org/wiki/Leap_seconds

Date: 2006-10-15 08:17 pm (UTC)
From: [identity profile] zvantsev.livejournal.com
А почему в апострофах?

Date: 2006-10-15 08:36 pm (UTC)
From: [identity profile] drmor.livejournal.com
Потому что char. А в кавычках -- это будет char*. :)

Date: 2006-10-15 08:58 pm (UTC)
From: [identity profile] msh.livejournal.com
Правильно, потому что это должно браться из LC_MONETARY

Date: 2006-10-15 09:06 pm (UTC)
From: [identity profile] avva.livejournal.com
На самом деле мысль возникла в контексте размышлений о языке, использующем $ в качестве служебного символа, так что не совсем. Но мне нравится направление вашей мысли! :)

Date: 2006-10-15 09:26 pm (UTC)
From: [identity profile] breqwas.livejournal.com
Помню книжку по Java, где было сказано: "использовать $ в идентификаторах можно, но настоятельно не рекомендуется для всех, кроме старых программистов на perl"

Date: 2006-10-15 09:24 pm (UTC)
From: [identity profile] white-lee.livejournal.com
Ну, можно еще и так :)

Date: 2006-10-15 10:14 pm (UTC)
From: [identity profile] cmm.livejournal.com
мама.

Date: 2006-10-15 10:32 pm (UTC)
From: [identity profile] avva.livejournal.com
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa

Date: 2006-10-15 10:32 pm (UTC)
From: [identity profile] avva.livejournal.com
упал пацтул :)

Date: 2006-10-16 12:53 am (UTC)
From: [identity profile] french-man.livejournal.com
А что там на выходе получается?

Date: 2006-10-16 06:23 pm (UTC)
From: [identity profile] avva.livejournal.com
Если честно, не знаю, да и неважно :)

Date: 2006-10-15 09:33 pm (UTC)
From: [identity profile] caseq.livejournal.com
Сдавал я как-то зачет по формальным грамматикам Фитиалову -- человеку в своей области довольно именитому (http://www.yandex.ru/yandsearch?text=%F4%E8%F2%E8%E0%EB%EE%E2+%F1.%FF.&stype=www). Поскольку, как и большинство всего остального в жизни, я делал это невовремя, то пришлось ловить Маэстро прямо на кафедре и отвлекать от написания кода. Конечно, надо делать поправку на то, что один из отцов-основателей отечественной структурной лингвистики к тому времени был уже крайне немолод и, по слухам, многовато пил, но все же способ, которым Маэстро писал на C, поверг молодого и впечатлительного меня в такой шок, что эти строчки даже много лет стоят у меня перед глазами:

#define BEGIN {
#define END }
#define THEN
...

Date: 2006-10-15 09:58 pm (UTC)
From: [identity profile] avva.livejournal.com
Прекрасно :)

Date: 2006-10-16 02:45 am (UTC)
From: [identity profile] e2pii1.livejournal.com
Конечно, надо писать:
const char DOLLAR_SIGN = '$';

:-)))
(deleted comment)

Date: 2006-10-16 06:22 pm (UTC)
From: [identity profile] avva.livejournal.com
Потому что лишний уровень абстракции здесь ничего не дает, и только усложняет исходники. Это если вкратце, вообще-то это не уровне ощущения, и сложнее несколько.

Date: 2006-10-16 06:23 pm (UTC)
From: [identity profile] avva.livejournal.com
Понимаете, #define-ы такого рода как бы дают программисту ощущение большего контроля над кодом, чем у него на самом деле есть. Ощущение обманчивое и в конечном итоге для него вредное, но он пока этого не понимает. Вот так еще можно сказать.

Date: 2006-10-16 06:43 pm (UTC)
From: [identity profile] cmm.livejournal.com
тут две возможные проблемы: либо программист не понимает всю бесполезность подобного занятия, либо понимает но продолжает дрочить.

что хуже, даже не знаю.

Date: 2006-10-16 07:46 pm (UTC)
From: [identity profile] haiut.livejournal.com
логично :)

Date: 2006-10-18 12:00 am (UTC)
From: [identity profile] zigmar.livejournal.com
На "Daily WTF" проскакивала заметка про какого умника - веб программиста, который прослышав об удобстве CSS наобъявлял кучу стилей вроде "ariel-14-bold-black", которыми и пользовался во всём проекте. Это примерно из той оперы.

Хотя у меня в школе как-то преподавала С тётка, прошедшую местную армейскую компьютерную школу (МАМРАМ). Она было толковым учителем во всех отношениях, но за константы в коде снижала оценку, даже когда это было, например, 60 как число минут в часе.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 10:49 pm
Powered by Dreamwidth Studios