И еще о поддерживаемости кода
Mar. 4th, 2009 05:36 pmВдогонку к этой
и немного этой записям. И еще немного к боковому хвосту у Витуса.
Один из типичных приемов собеседования с программистами - показ зубодробительной конструкции на языке, на котором собирается программировать соискатель, и вопрос, что она делает. Наиболее часто мне попадался C-шный пример, когда вместо переменной объявлялась функция.
Так вот, господа. Когда вам показывают такой пример (если он выходит за пределы разумного понимания языка и знания ключевых слов или общепринятых идиом), то скорее всего - одно из двух.
1. Собеседующий пытается срезать соискателя. То есть самоутвердиться. Вам нужен такой начальник?
2. Код реально используется в проекте? Вы действительно хотите это поддерживать?
Да, и главное, без чего пп.1-2 не действуют. Понимать, что предъявленный пример собой представляет - все-таки надо. Чтобы было ясно, что объявлена таки переменная, а не функция.
и немного этой записям. И еще немного к боковому хвосту у Витуса.
Один из типичных приемов собеседования с программистами - показ зубодробительной конструкции на языке, на котором собирается программировать соискатель, и вопрос, что она делает. Наиболее часто мне попадался C-шный пример, когда вместо переменной объявлялась функция.
Так вот, господа. Когда вам показывают такой пример (если он выходит за пределы разумного понимания языка и знания ключевых слов или общепринятых идиом), то скорее всего - одно из двух.
1. Собеседующий пытается срезать соискателя. То есть самоутвердиться. Вам нужен такой начальник?
2. Код реально используется в проекте? Вы действительно хотите это поддерживать?
Да, и главное, без чего пп.1-2 не действуют. Понимать, что предъявленный пример собой представляет - все-таки надо. Чтобы было ясно, что объявлена таки переменная, а не функция.
no subject
Date: 2009-03-04 04:42 pm (UTC)Это слишком грубо противоречит стандарту.
no subject
Date: 2009-03-04 05:37 pm (UTC)Комментарий к проекту Американского Национального Стандарта по Информационным Системам. Язык программирования Си
3.3.2.4 Постфиксные операции увеличения и уменьшения
Комитет не одобрил практикующееся в некоторых реализациях рассмотрение выражений, построенных из префиксных и постфиксных операций, в качестве адресных значений.
Компилятор Turbo C 1.5 был именно таким, и я узнал, что это не соответствует стандарту, именно тогда, когда в Turbo C 2.0 это исправили. К сожалению, мне не удалось найти 1.5 ни в сети, ни в своих архивах, чтобы сейчас это подтвердить (2.0 валяется везде, 1.5 нигде нет).
... Нет, против жаворонков жабы - прелесть! ...
no subject
Date: 2009-03-04 07:48 pm (UTC)Неужто правда?
Но всё равно пока верить не буду, это слишком разрушает мой мозг :-)
no subject
Date: 2009-03-04 08:43 pm (UTC)int c=3;
int d=(++c)++;
printf("%d\n",d);
на C это не компилируется, зато на С++ - без проблем.
no subject
Date: 2009-03-04 09:08 pm (UTC)char s[] = "hello";
В плюсах (не в Си!) какого типа переменная s? Какого типа константа "hello"? Можно ли присваивать второе в первое? Почему компилятор не ругается?
... Жучки сами падают в него с дивной избирательностью ...
no subject
Date: 2009-03-04 09:20 pm (UTC)чтобы получился вопрос про С vs С++ нужно написать char* s. (кстати, куда ставить пробел?)
no subject
Date: 2009-03-04 09:50 pm (UTC)... В Нуменор, в Арканар, в Зазеркалье, Заморье, Замостье ...
no subject
Date: 2009-03-04 09:00 pm (UTC)++ph %= 100;
И, пока программа собиралась полуторными турбо-сями, это работало! Сломалось только на вторых. Исходник даже сохранился (самая старая моя программа для PC платформы ;-), но, увы, в уже исправленном виде. Но я хорошо помню, что именно на этой строчке я научился, что так на самом деле делать нельзя.
... Оружие массовой победы ...
no subject
Date: 2009-03-04 09:29 pm (UTC)no subject
Date: 2009-03-04 09:55 pm (UTC)... Зимой можно смелее учиться летать ...
no subject
Date: 2009-03-04 10:05 pm (UTC)no subject
Date: 2009-03-04 10:24 pm (UTC)P.S. Слышал историю, что идеальной проверялкой корректности сишных программ был советский ещё компилятор с сей для Эльбруса. Машина с аппаратной типизацией и аппаратным же контролем границ (никаких тупых указателей, только дескрипторы). Си строго по букве стандарта на ней реализовать можно, и это было сделано, но все сомнительные конструкции резались нещадно. Нашли массу ошибок в программах, годами работавших на более традиционных архитектурах.
... Прекрасный лунный день ...
no subject
Date: 2009-03-04 07:02 pm (UTC)no subject
Date: 2009-03-04 07:43 pm (UTC)a.c:3: error: invalid lvalue in increment
И так везде от JavaScript до PHP.
no subject
Date: 2009-03-04 09:12 pm (UTC)... Sing, Maglor the Stranger, a ballade for me ...