Программисты, поясните что это

starkiller
Уже с Приветом
Posts: 891
Joined: 21 Mar 2005 21:18
Location: California

Post by starkiller »

AndreyT wrote:Ситуация, когда автор постановки задачи сам толком не знает правильного ответа, не является какой-то необычной, как прекрасно понимают все участники технических дискуссий.



.. кроме автора постановки задачи :)
User avatar
venco
Уже с Приветом
Posts: 2001
Joined: 10 Nov 2004 00:34
Location: MD

Post by venco »

SVK wrote:бесконечный цикл с i от 0, -1, -2, -3, .... (Точнее - цикл до переполнения с фиксированной точкой, обычно около 2^31 повторений, если кто доживет до этого счастливого момента).

Ждать в наше время придётся не так уж и долго.
Даже на cygwin с довольно медленным выводом у меня этот цикл завершился за <5 минут.
Анекдот про быстрые процессоры Интел не на пустом месте возник. В то время действительно подобный "бесконечный" пустой цикл исполнялся за 7 секунд. Сейчас - за 1 секунду.
User avatar
AndreyT
Уже с Приветом
Posts: 3000
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Post by AndreyT »

starkiller wrote:
AndreyT wrote:..как настоящий anal retentive педант :umnik1: сообщу, что если расценивать это именно как программу, а не как фрагмент кода, то решения не существует ..


Kак не существует ядро линукс и 99% софта написанного не в соответствии со стандартом (которым из??) языка C


В реальной жизни и треугольники бывают, у которых сумма уголов не 180 градусов. Сам мерял. Это, тем не менее, никак не влияет на школьный курс геометрии. Не надо мешать в одну кучу абстрактные задачи на языке С и грязноватые эксперименты из гаража дядюшки Линуса.
Best regards,
Андрей
User avatar
AndreyT
Уже с Приветом
Posts: 3000
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Post by AndreyT »

starkiller wrote:
AndreyT wrote:Ситуация, когда автор постановки задачи сам толком не знает правильного ответа, не является какой-то необычной, как прекрасно понимают все участники технических дискуссий.


.. кроме автора постановки задачи :)


В данном случае автор, похоже, прекрасно это понимал,что несложно увидеть из заголовка сообщения: "Программисты, поясните что это". Но потом понимание, как мне показалось, как будто куда-то выветрилось...
Best regards,
Андрей
starkiller
Уже с Приветом
Posts: 891
Joined: 21 Mar 2005 21:18
Location: California

Post by starkiller »

AndreyT wrote:Не надо мешать в одну кучу абстрактные задачи на языке С и грязноватые эксперименты из гаража дядюшки Линуса.


Что же по вашему такое "язык C"? K&R?
Только официальных стандартов существует с десяток.
User avatar
AndreyT
Уже с Приветом
Posts: 3000
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Post by AndreyT »

starkiller wrote:
AndreyT wrote:Не надо мешать в одну кучу абстрактные задачи на языке С и грязноватые эксперименты из гаража дядюшки Линуса.


Что же по вашему такое "язык C"? K&R?
Только официальных стандартов существует с десяток.


Официальных станадартов у С существует ровно два: C89/90 и С99. Никаких других стандартов у С нет.

Мир, программирующий на С, сегодня программирует в подавляющем большинстве на C89/90. Какие-либо местечковые диалекты C89/90 являются не более чем недоделанным/урезанными/расширенными и т.п. реализациями C89/90 и именно так себя и позиционируют.

K&R стандартом не является. K&R, как книга, - это "рассуждения у камина по следам конкретной реализации".
Best regards,
Андрей
User avatar
KP580BE51
Уже с Приветом
Posts: 15007
Joined: 14 Jun 2005 11:50
Location: Ukraine

Post by KP580BE51 »

AndreyT wrote:K&R стандартом не является. K&R, как книга, - это "рассуждения у камина по следам конкретной реализации".


http://ru.wikipedia.org/wiki/%D0%A1%D0% ... 0%B8%D1%8F)
K&R ввёл следующие следующие особенности языка:

* записи (тип данных struct);
* длинное целое (тип данных long int);
* целое без знака (тип данных unsigned int);
* оператор += и подобные ему (старые операторы =+ вводили анализатор лексики компилятора Си в заблуждение, например, при сравнении выражений i =+ 10 и i = +10).

K&R C часто считают самой главной частью языка, которую должен поддерживать компилятор Си. Многие годы даже после выхода ANSI C, он считался минимальным уровнем, которого следовало придерживаться программистам, желающим добиться от своих программ максимальной портативности, потому что не все компиляторы тогда поддерживали ANSI C, а хороший код на K&R C был верен и для ANSI C.

8O
User avatar
AndreyT
Уже с Приветом
Posts: 3000
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Post by AndreyT »

KP580BE51 wrote:...


И? Все равно K&R - не более чем описание языка "на пальцах" с элементами устного народного творчества. Существует определенный консенсус по поводу того, как должен работать K&R C и это можно назвать "де факто стандартом", но тем не менее настоящих стандартов у С только два.

Отдельно стоит заметить, что на "истинный" K&R в реальном программировании практически не встречается. То, что обычно называют "K&R", является на самом деле более поздним и более продвинутым AT&T развитием идей K&R с заимствованиями чуть ли не из зарождающегося C++.

В чистом K&R, например, имена полей структур должны быть уникальны среди всех структур в программе, ибо имя поля являлось глобальным идентификаторм смещения этого поля от некоей базовой точки в памяти. (Точнее, совпадение имен полей в разных структурах разрешалось, но только если совпадают и смещения). При этом разрешалось писать следующий код

Code: Select all

struct S { int t; };
...
0x123->t = 5;


Кто-нибудь из присутствующих программировал на таком C? А это и есть настоящий K&R.
Best regards,
Андрей
starkiller
Уже с Приветом
Posts: 891
Joined: 21 Mar 2005 21:18
Location: California

Post by starkiller »

AndreyT wrote:
Мир, программирующий на С, сегодня программирует в подавляющем большинстве на C89/90. Какие-либо местечковые диалекты C89/90 являются не более чем недоделанным/урезанными/расширенными и т.п. реализациями C89/90 и именно так себя и позиционируют.


Вы о каком мире говорите? Такое ощущение что вы где то работаете в академических кругах или на консалтерскую контору. У них популярно программирование на "стандартном" С. Мир в основном пишет под GCC (что уж стандартным в вашем понимании C никак не назовешь) и других "местечковых диалектах".
Last edited by starkiller on 13 Sep 2006 18:44, edited 2 times in total.
starkiller
Уже с Приветом
Posts: 891
Joined: 21 Mar 2005 21:18
Location: California

Post by starkiller »

AndreyT wrote:Кто-нибудь из присутствующих программировал на таком C? А это и есть настоящий K&R.


Кто-нибудь из присутствующих использует коаксиальный кабель Ethernet (10BASE2)? Нет? Тогда это уже в вашем понимании не стандарт? А стандарт остался "ровно один" - тот который вы используете.
User avatar
KP580BE51
Уже с Приветом
Posts: 15007
Joined: 14 Jun 2005 11:50
Location: Ukraine

Post by KP580BE51 »

starkiller wrote:
AndreyT wrote:Кто-нибудь из присутствующих программировал на таком C? А это и есть настоящий K&R.


Кто-нибудь из присутствующих использует коаксиальный кабель Ethernet (10BASE2)? Нет? Тогда это уже в вашем понимании не стандарт? А стандарт остался "ровно один" - тот который вы используете.

arhnet - лучший езернет. Только он мог работать по телефонной лапше!!!
User avatar
AndreyT
Уже с Приветом
Posts: 3000
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Post by AndreyT »

starkiller wrote:
AndreyT wrote:
Мир, программирующий на С, сегодня программирует в подавляющем большинстве на C89/90. Какие-либо местечковые диалекты C89/90 являются не более чем недоделанным/урезанными/расширенными и т.п. реализациями C89/90 и именно так себя и позиционируют.


Вы о каком мире говорите? Такое ощущение что вы где то работаете в академических кругах или на консалтерскую контору. У них популярно программирование на "стандартном" С. Мир в основном пишет под GCC (что уж стандартным в вашем понимании C никак не назовешь) и других "местечковых диалектах".


Отнюдь. Я работаю на сугубо "практическую" контору. И пишем мы именно на С. Причем строимся для большого количества платформ - Solaris, несколько Linux-ов, WinNT, как 32, так и 64 бита. Раньше еще строились для HP-UX, AIX и еще кое-каких зверей, которые сейчас отошли на задний план. GCC у нас используется только для Linux. На Solaris используется "родной" компилер (как и на HP-UX и AIX). На WinNT - компилер из комплекта MSVC.

На "местечковых диалектах" мир пишет просто потому, что стеднестатистический программист с самого начала учился писать на каком-то местечковом диалекте и просто не знает, где проходит граница между ним и стандартным С. Потом, при необходимости, этот же программист (или специально заточенный человек) ударно выполняет работу по "портированию" с одного местечкового диалекта на другой (читай: гора #ifdef-ов), победно рапортует о предпринятых усилиях и "лавры текут к нему" за успешно выполненную бессмысленную работу.

Кстати, я никоим образом не утверждаю, что пользоваться особенностями конкретной реализации и/или платформы нельзя. Я лишь считаю, что надо понимать, что делаешь, и не лезть в местечковые дебри, если требуемая функциональнсть прекрасно реализуется стандартными средствами языка. С этим, впрочем, мало кто станет спорить, но к сожалению уровня компетентности среднестатистического девелопера сегодня как правило недостаточно, чтобы следовать этому правилу. Отсюда - разнообразные "писания под GCC" со всеми вытекающими.
Last edited by AndreyT on 13 Sep 2006 20:04, edited 2 times in total.
Best regards,
Андрей
User avatar
AndreyT
Уже с Приветом
Posts: 3000
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Post by AndreyT »

starkiller wrote:
AndreyT wrote:Кто-нибудь из присутствующих программировал на таком C? А это и есть настоящий K&R.


Кто-нибудь из присутствующих использует коаксиальный кабель Ethernet (10BASE2)? Нет? Тогда это уже в вашем понимании не стандарт? А стандарт остался "ровно один" - тот который вы используете.


При чем здесь "используете"? Я не проводил никакой взаимосвязи между "используемостью" и "стандартностью". Мои пример приводился лишь для иллюстрации того факта, что среднестатистический программист толком и не знает, что за язык скрывается за обозначением "K&R C". Точнее, толкования этого обозначения могут различаться. А используют его или нет в данном случае не важно. В любом случае, это был лишь "пример на полях".

Вопрос же стандарт-не стандарт является чисто фактографическим и спорить тут соврешенно не о чем. Существует официальный стандарт Ethernet (10BASE2). Существуют стандарты С: C89/90 и C99. Это официальные документы. Стандарта K&R С - не существует. Вот, собственно, и все.
Best regards,
Андрей
starkiller
Уже с Приветом
Posts: 891
Joined: 21 Mar 2005 21:18
Location: California

Post by starkiller »

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

Кстати на мой взгляд немного людей пишут мультиплатформный код на С. Это все же по дизаину язык полусистемный (идеален для написания ОС и драйверов) и других достоинств у него нет, поэтому критерии его выбора часто коррелируют с привязкой к конкретной платформе с целью выжaть побольше из ее нестандартности. Интересно что за приложения вы пишете? Вы уверены что С для вас - оптимальный выбор? Я знал контору которая делала маршрутизатор на нескольких ОС платформах, но им пришлось ввести довольно таки жирный слой кода абстрагирующий их от железа и ОС.
starkiller
Уже с Приветом
Posts: 891
Joined: 21 Mar 2005 21:18
Location: California

Post by starkiller »

AndreyT wrote:На "местечковых диалектах" мир пишет просто потому, что стеднестатистический программист с самого учился писать на каком-то местечковом диалекте и просто не знает, где проходит граница между ним и стандартным С.


Вы недооцениваете "среднестатистического программиста" :nono#:
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

starkiller wrote:Это так. Но изначально Вы говорили о стандартном С а не стандартах на язык С. Это согласитесь не одно и то же.

стандартный - соответствует стандарту.
То, на котором все пишут - ето не стандартный, а "нормальный"..

starkiller wrote: Это все же по дизаину язык полусистемный (идеален для написания ОС и драйверов) и других достоинств у него нет, поэтому критерии его выбора часто коррелируют с привязкой к конкретной платформе с целью выжaть побольше из ее нестандартности.

ну язык то зам по себе плафромо-независимый, а вот библиотеки - они АФАИР даже раньше стандартом не были..

[qote]
Интересно что за приложения вы пишете? Вы уверены что С для вас - оптимальный выбор? Я знал контору которая делала маршрутизатор на нескольких ОС платформах, но им пришлось ввести довольно таки жирный слой кода абстрагирующий их от железа и ОС.[/quote]

Наверняка ето лучший выход. Мы пишем на 19 (?) платформ и тоже на C..
Кстати враппер там совсем не толстый...
Верить нельзя никому - даже себе. Мне - можно!
vzhik
Уже с Приветом
Posts: 1580
Joined: 15 Oct 2006 16:51

Post by vzhik »

Code: Select all

main() 
{
int i, N=20;
for(i =40 ; i < N ; i--)
printf("*");
}
User avatar
AndreyT
Уже с Приветом
Posts: 3000
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Post by AndreyT »

vzhik wrote:

Code: Select all

main() 
{
int i, N=20;
for(i =40 ; i < N ; i--)
printf("*");
}


Во-первых, по условию тебуется изменить один символ ("не добавить, не убрать, не переставить - изменить один символ").

Во-вторых, обратите внимание на условие цикла: 'i < N'.
Best regards,
Андрей
Bambr
Новичок
Posts: 34
Joined: 04 Jan 2005 20:24

Хм

Post by Bambr »

Интересно, вот такой ответ подойдёт

int i, N=20;
for(i = 0 ; i < N ; N--)
printf("*");

Заменяем на
----------------------
Было, извиняюсь

Return to “Вопросы и новости IT”