2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней. На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
 
 Re: Странное поведение оператора if else в языке Си
Сообщение08.10.2018, 17:28 
Заслуженный участник
Аватара пользователя


30/01/06
72407
А, действительно.

Но всё-таки драйвера и контроллеры - это ниша, формирующая довольно узкий и смещённый взгляд.

 Профиль  
                  
 
 Re: Странное поведение оператора if else в языке Си
Сообщение08.10.2018, 17:38 


27/08/16
9426
Munin в сообщении #1344490 писал(а):
Но всё-таки драйвера и контроллеры - это ниша, формирующая довольно узкий и смещённый взгляд.
Мне не показалось, что он компетентен только в драйверах. Его обобщения разумны. Начинал с Бейсика, т. е. скорее всего давно. Не новичок.

-- 08.10.2018, 17:58 --

realeugene в сообщении #1344489 писал(а):
Кроме того, первые такие пользователи мирились с постоянными ошибками, крэшами, непонятной и сложной документацией, а часто её и отсутствием, но рынок заставил софтверные фирмы изменить это отношение.

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

 Профиль  
                  
 
 Re: Странное поведение оператора if else в языке Си
Сообщение08.10.2018, 21:51 
Заслуженный участник
Аватара пользователя


30/01/06
72407
realeugene в сообщении #1344494 писал(а):
Его обобщения разумны.

Вот какбе далеко не все.

Знаю я таких, начинавших с басика и асма, сам (почти) такой был. Вот только с этого уровня надо взрослеть...

realeugene в сообщении #1344494 писал(а):
Вы где в последний раз видели документацию на программы для телефона?

Во! Это вообще следующая стадия: когда программа настолько понятна, что документация и не нужна! Интуитивно понятный интерфейс (ну, или "интуитивно", это как производитель справится, но с учётом мемов типа "меню-настройки-галочки-radiobuttons" довольно многие справляются), всегда под рукой хелп и контекстный хелп. Это всё достижение, извините, не больше последних 30 лет. Многие Un*x/GNU продукты унаследовали идеологию прошлых времён: многотомные зубодробительные man-ы. Это, кстати, в огород интерфейсу командной строки: на настройку "на лету по месту, с нулевыми начальными знаниями" он не способен. Впрочем, к счастью, на телефонах командной строки и нет (почти).

realeugene в сообщении #1344494 писал(а):
Нет, мне не кажется, что изменилось отношение софтверных фирм. Просто, появились фреймворки и языки, на которых сложнее уронить программу и, тем более, всю систему.

Ну не сами же собой они появились, и на них перешли. Это всё оно и есть. А отношение тут очень простое: сделаешь хуже, чем у конкурентов - выпрут с рынка.

realeugene в сообщении #1344494 писал(а):
Просто, появились фреймворки и языки, на которых сложнее уронить программу и, тем более, всю систему. Но массовый программер сейчас менее квалифицированный, чем раньше.

Это тоже две черты одного процесса: потому сейчас и могут быть программеры менее квалифицированные, и участвовать в проектах той же или большей сложности, что их среда поддерживает. И это хорошо. Растёт производительность программирования, рынок насыщается конкурентными предложениями. А где ситуация требует - там по-прежнему квалифицированного найти можно: есть спрос, будет и предложение. Но хорошо, что это "требует" возникает из-за объективных сложностей, а не из-за мазохистского аскетизма и неиспользования доступных инструментов.

 Профиль  
                  
 
 Re: Странное поведение оператора if else в языке Си
Сообщение09.10.2018, 02:02 


29/12/13
306
realeugene в сообщении #1344365 писал(а):
Seman тут, похоже, участник с самым большим практическим опытом в программировании. К написанному им многим тут стоит прислушаться. Не заметил в написанном им тут ничего, что у меня вызвало бы отторжение.

Спасибо. Доброе слово. оно и кошке приятно. На самом деле нет. Я не гуру с большим опытом, скорей офисный программист с большим стажем.

Тут интернет, мы стараемся быть анонимны с одной стороны. С другой стороны любой Вася может представляться кем угодно, хоть спецом по квантовой физике, хоть гуру-программирования. С одной стороны писать резюме с портфолио и ссылками на проекты, вроде как. тут тоже, ну не знаю насколько уместно. С другой стороны, не хочу никого вводить в заблуждение и выдавать себя за что-то, чем не являюсь.
С третьей, реально читаю форум(этот и прочие) и удивляюсь, я не осуждаю, никого не хочу обидеть, мне просто интересно кто все эти интернет гуру, адепты олимпиадного программирования, которые советуют писать arr[1+3] , if( 1 == a) (такого тут много) рассуждают о высоких материях, но при этом не знают как написать простейший скрипт чтобы залогинится на сайте или как упаковать javascript в исполняемый файл? Ребята кто вы? Может правда кто работает в гугл или яндекс, или пишут программное обеспечение для обработки данных с коллайдера? Поэтому кратко расскажу о себе. Это как первый шаг. рассказать о себе. не злитесь. Я надеюсь на понимание, может Munin или warlock66613, тоже расскажут что-то о себе. Кто вы? Я дальше напишу и уберу о себе в офтопик, тут много буквь.

(Оффтоп)

Где-то в 92-ом мне купили "пентагон", вот на нём я и программировал на васике))) . С 96-ого учился, специальность автоматизация(не программирование), но программировали на asm-е и на С довольно много. И вообще сколько себя помню всегда что-либо программировал, редко было и бывает, чтобы прошел день и я не написал какого-либо кода. В те времена, хотя винда уже во всю использовалась мы писали в dos-овом окошке, в редакторе turbo c и edit'e без всяких ide. А еще среди предметов была тау, оптимизация, математическое моделирование, сейчас я это все позабыл, но так я познакомился с матлабом, сейчас, по сей день использую octave(больше как продвинутый калькулятор) с матлабом у них похож язык. По работе, я официально по трудовой работал программистом с 2000-ого года. Так сложилось(с 2000-ого или даже чуть раньше), я сначала помогал другу, потом работал на его месте, он ушел в другое. Работа была VB6.0 + ms sql server, С/С++ по работе изредка, когда надо было написать нестандартную dll, но это по минимуму. В свободное время изучал win api и всякие низкоуровневые особенности винды. Да, тогда же или раньше, кто-то посоветовал, читать Кнута, я стал читать, даже написал свой интерпретатор mix. Ничего из него мне по работе ни разу, не понадобилось. Вот это была пустая трата времени. Впрочем, периодически, я его(Кнута) читаю и по сей день(иногда), по алгоритму Кнута, что он приводит как читать его книгу. но это больше для себя, как хобби. Потом пришел .net, и пришлось перейти на vb.net, затем перешел на шарп. Работы менялись, делал разное, но в основном c# .net + ms sql . Был период, что в конторе, где работал, был веб сайт, который приходилось обслуживать, так довольно близко познакомился html, javascript и php. До этого, правда, еще в 97-ом, когда учился, делал себе домашнюю страничку с гостевой на perl. И по мелочам сталкивался с вебом и до этого. После было, что поддерживал, обслуживал небольшие сайты, но никак основная работа. Потом, был период работал с avr-ами(с микроконтроллерами и avr`ами в частности, их программированием познакомился до этого, ещё когда учился, но профессионально(за деньги) не работал до этого). Там простой проект был типа "кнопка лояльности"(это было до пролана, и у нас оно загнулось, вместе конторой, по маркетинговым причинам, хотя функицонал и возможностей больше я считаю у нас было тогда), avr-ная часть была на СИ(да. писалось в ide avr studio))) ), а десктопная часть писалась на шарпе. Это несколько лет длилось. Потом ещё несколько лет с другими проектами с шарпом в основном. Проект с драйвером kmdf, был в 13-14-ом году и там все довольно просто было. Последний 16-ий и часть 17-ого года, много и довольно муторно работал на С++ и javascript, причем javascript не под браузер и не под node, а под довольно специфическую внутрикорпаративную платформу, которая сама на C++ и расширяется плагинами на C++ . Да и последние лет 10 python стал периодически попадаться, я его стал изучать лет пять назад, и периодически изучаю т.к. приходится иногда иметь с ним дело, хотя не очень он мне нравится, по этому по возможности стараюсь его избегать. Сейчас год не работаю, я устал от последней работы и не особо хочу работать, но работа все равно есть, конкретно сейчас пишу gui интерфейс на/под qt(это по сути С++, но с некоторыми улучшениями) для настройки новогодней игрушки-мигалки. С интерфейса, что я пишу настраиваются режимы как оно мигает. Я бы сделал на шарпе, но оно должно быть кроссплатформенным.

Ещё чуть про asm, низкоуровневые вещи и иже с ним. Хотя оно никогда не было у меня основной работой, выручало неодноктратно от крякнуть программу(которая нужна, а готового кряка нет и покупать нет денег).
Хотя фотошоп может и не осилю(я и непробовал, он всегда уже взломан до меня), но небольших утилиток я переломал не мало, иногда это выручало. До написать патч к чему-то что уже есть, но исходников нет, а поправить надо. Конкретные примеры из практики, например был готовый сервис под винду, написанный неизвестно кем когда и без исходников, работал назовем это в двух режимах, но стартовал только в одном, в другой его можно переключить, когда уже запущен, а нужно, чтобы он в нем стартовал и продолжал работать(корректно). Вот я его с отладчиком(уже ida) ковырял, разобрался, написал патч(программу, которая правит exe-шник(исполняемый файл), так что он стартует как надо, а не так как стартовал). Другой нестандартный пример на winapi. 1с семерка, там при входе окошко с пользователями которые выбираются и паролем, пользователи и пароли нужны, но на одной машине надо, было так чтобы при входе пользователя в систему(в домен), сразу открывалась семерка под нужным пользователем(он соответствует пользователю домена но не совпадает, например в домене Irina, в семерке "Ирина Николаевна") при чем надо было чтоб открывалась она во весь экран, без обрамлений окошка, и работать пользователь мог бы только с этим окошком, ни рабочий стол, ни меню пуск, ни что другое ему должно быть недоступно . Ну вот я написал программу, которая проверяет пользователя, запускает семерку, заходит в неё под кем надо, правит её окно - меняет стиль, убирает обормление и т.д.. И вот такие задачи реально попадались. Хотя справедливости ради, в принципе, если было бы на них забить, ничего особо не поменялось бы. Хотя все равно помогало.


Я не мега спец, я не гуру. Вот, кто-то из яндекса сказал, что программисты это как художники, есть которые рисуют картины, а есть те кто, красят заборы. Так вот, я всю жизнь красил и крашу заборы. Но я все-таки какой-никакой профессионал, и мне интересно кто мне и другим людям, советует писать arr[1+3] и прочие вещи? Ладно ещё новичкам, а то вообще всем. Да, И вообще принципе интересно, кем должен быть человек, кем работать, чтобы разбираеться во всем от фундаментальной физики до программирования, и при этом годами сидеть на форуме? Если ли это лид из гугла это одно, если учитель информатики из средней школы это другое, если просто форумный Вася, который кроме hello world ничего не написал это совсем другое. Я даже порой теряюсь определить уровень собеседника, вроде пишет что-то умное, потом раз, и что-то такое, что говорит, да он же вообще не понимает о чем пишет.


Munin в сообщении #1344441 писал(а):
Между ними 20 лет разницы. Советую посмотреть, какие у них размеры.

Линукс и сейчас пишется на том же самом СИ и там десятки миллионов строчек кода.

Munin в сообщении #1344441 писал(а):
У-у-у. Пора заканчивать разговор.

Вы только так и необъяснили, что такое "унифицировать систему обработки ошибок" применительно к СИ ?
Так же как что и когда, в СИ такого появилось, что позволило это делать?

Заодно, вопрос:

Munin в сообщении #1344220 писал(а):
(Хотя я бы сначала по убывающей использовал C++-style string<>.)

О чем это было?
В си нет классов, нет шаблонов. В С++ string не шаблон, basic_string - шаблон, но что такое "string<>" ?



Munin в сообщении #1344441 писал(а):
Довольно наивная цитата. Та её часть, которая "за всё хорошее против всего плохого", возражений не вызывает.

Что именно и почему вам показалось наивным? Что конкретно "за всё хорошее против всего плохого"?

Munin в сообщении #1344441 писал(а):
Скажите, для начала, кому и зачем вы её хотите донести. И случился ли в этой теме достаточно значимый для этого повод.

Хотел донести arseniiv`у и тем кто не понимает в чем проблема с ide. Поводом был, его вопрос:
arseniiv в сообщении #1344300 писал(а):
Кстати не понимаю, почему некоторые настроены так сильно против IDE. Полезные же штуки, особенно когда написаны грамотно.



Munin в сообщении #1344476 писал(а):
. Seman несёт наивный бред, а вы не можете его отличить от профессионализма.

Что конкретно из моих высказываний вам показалось бредом и почему?

-- 09.10.2018, 02:09 --

Munin в сообщении #1344441 писал(а):
Менялся контекст.

Это как?

 Профиль  
                  
 
 Re: Странное поведение оператора if else в языке Си
Сообщение09.10.2018, 03:06 


29/12/13
306
Munin в сообщении #1344573 писал(а):
Многие Un*x/GNU продукты унаследовали идеологию прошлых времён: многотомные зубодробительные man-ы. Это, кстати, в огород интерфейсу командной строки: на настройку "на лету по месту, с нулевыми начальными знаниями" он не способен. Впрочем, к счастью, на телефонах командной строки и нет (почти).


Это кстати, хорошо сказано. Запомнить надо.

А почему неспособен, то? Многие начинали работать с командной строкой, ещё до гуи, т.е. когда начинали знания у них были нулевые, но они как-то начали и гуи не было, как так?

Munin в сообщении #1344573 писал(а):
Впрочем, к счастью, на телефонах командной строки и нет (почти).


Ошибаетесь .
adb shell -- и вы в линуксе своего телефона, это если android , если iphone , то jailbreak надо делать, но она родная там тоже есть.

-- 09.10.2018, 03:36 --

Вот, я сейчас пишу гуи, очень простой и проект очень простой, но только qml (разметка интерфейса) 830 строчек, и 1050 строчек c++ без заголовочных файлов, но большая часть кода на обслуживание интерфейса и строчек 50 реального функционала. Не тратив время на гуи можно было бы сделать куда более функциональную вещь. И даже посчитать сколько строчек во всех файлах в директории, я пишу "ls *cpp | xargs wc -l" , вот каким гуи вы это делаете?

 Профиль  
                  
 
 Re: Странное поведение оператора if else в языке Си
Сообщение09.10.2018, 04:56 


29/12/13
306
Seman в сообщении #1344640 писал(а):
Ребята кто вы?


Вот реально. смотрю другую тему, человек пишет:

Dmitriy40 в сообщении #1344647 писал(а):
Я работаю программистом и мне математика пригодилась, не однажды. Далеко не вся конечно, но несколько довольно разных разделов.


В этой теме :
Dmitriy40 в сообщении #1344250 писал(а):
А если в массиве могут быть строки не только с нулём на конце (а и например с символом '$' как было кое-где в DOS)? Делать по макросу на каждый вариант окончания или назвать макрос сразу SYMBOL_SUFFIXED (сразу учесть в названии и не однобайтовые символы)? А если может заканчиваться не байтом, а к примеру двумя нулевыми байтами (как бывает для списка строк ровно из одной строки :facepalm:, если вдруг её надо передать в функцию обрабатывающую лишь списки строк, типа переменных окружения в DOS при запуске программы)?

На мой взгляд запись char s[3+1]; достаточно информативна (важно для не самых крутых профи) и лаконична (важно для профи).


И дальше :
Dmitriy40 в сообщении #1344265 писал(а):
Но бывает люди пишут свою обработку внешнего источника строк (как тот пример с переменными окружения). А потом хотят воспользоваться этой обработкой для одной строки чтобы не переписывать сложную обработку и не варганить обёртку. Конечно по правильному надо бы сначала разделить общий список на отдельные строки (и сложить в удобную структуру) и потом уже обрабатывать


Как? Это про строку, про строку КАРЛ.
Человек где-то работает программистом, у него такие трабалы , разделить строку разделителями, передать ее в функцию, распарсить строку в массив или куда ему надо. И ему пригождалась математика. Кто все эти люди???

-- 09.10.2018, 05:53 --

Seman в сообщении #1344653 писал(а):
'$' как было кое-где в DOS


Ещё, кто не знает. дабы осознать эпичность сказанного Программистом. Во первых, Не где-то, а в аsm'е, не было, а есть :

Используется синтаксис ASM
message     db       'строка:'
len               equ    $ - message ;   < --- длина строки
 


$ - означает отсюда, текущий адрес. Но это на asm.
А в СИ все стандартные функции заточены, под \0-терминированые строки, если строка кончается как-то по другому,
то например таже printf начнет выводить дальше пока не наткнется на ноль или на место в памяти откуда ей читать неположенно .

 Профиль  
                  
 
 Re: Странное поведение оператора if else в языке Си
Сообщение09.10.2018, 06:02 
Заслуженный участник


20/08/14
11063
Россия, Москва
Seman
С чего Вы взяли что вся моя работа программистом ограничена разбором строк окружения? ;-) И уж тем более что у меня с этим траблы?! :shock: Это был лишь пример, кажется я именно такого даже и не делал ни разу (было что-то аналогичное, но там был чистый асм, уж не помню почему готовыми функциями не воспользовался).
А вообще 90% моего кода - для микроконтроллеров. И в примерно 10% (очень навскидку) даже не на С, pure asm, с начала и до конца. Или до 70% - с асм вставками целых функций (потому что оптимизация компиляторов ужасна, а такты, байты и микроамперы часто важны, ну вот такие задачи). Понятно что никакой там продвинутой математики обычно нет. Но обычно не означает всегда, были и исключения.

(Одно из них)

Одно до сих пор помню, хотя уже лет 15 прошло: не понял в своё время как выбираются многочлены для CRC в зависимости от классов возможных ошибок, а понадобилось сварганить свой формат хранения с обнаружением специфических ошибок и как обычно под МК с ограниченными ресурсами, на CRC хватило бы, на что-то сильно сложнее уже нет. В итоге сделал тройное дублирование критичных данных со стандартной CRC в каждой копии. А мог бы исследовать вопрос математически и подобрать одну оптимальную CRC ... Причём вопрос не абстрактный, от него зависело какие микросхемы покупать и даже какого производителя из аналогов.
Правда пример получился не на пользу математики, а на возможную пользу. :-)


-- 09.10.2018, 06:05 --

Seman в сообщении #1344653 писал(а):
осознать эпичность сказанного Программистом
Вы бы дочитали сначала, прежде чем возражать, вот до этого:
Dmitriy40 в сообщении #1344260 писал(а):
Неудобно. А что делать если функция вывода строки из DOS-а (№9 в int 21h) берёт на вход именно такие строки ... Неудачное решение, да.
Что под DOS уже давно никто не пишет - согласен.
Так что речь не про текущий адрес.

 Профиль  
                  
 
 Re: Странное поведение оператора if else в языке Си
Сообщение09.10.2018, 06:31 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Seman
Я бы вам посоветовал... Нет, не буду советовать. Просто констатирую факт: большинство того странного, что вы говорите, - от банального неумения (или нежелания) читать.

Например:
    Seman в сообщении #1344640 писал(а):
    которые советуют писать arr[1+3] , if( 1 == a) (такого тут много)
    Seman в сообщении #1344640 писал(а):
    кто мне и другим людям, советует писать arr[1+3] и прочие вещи? Ладно ещё новичкам, а то вообще всем.
Во-первых, такого тут не много.
Во-вторых, if (1 == a) произносил я, но я как раз не советовал этого.
В-третьих, char arr[3 + 1] (не arr[1 + 3]) советовали отнюдь не всем, а ровно новичкам. Вам - никто не советовал. Тему начали не вы, а SpiderHulk, который в простой программе столкнулся с распространённой для новичков проблемой (правда, другой, чем та, на которую обращён этот совет).

И вот таких поправок нужно ко всему, что вы в режиме самовозбуждения пишете. Извините, я не буду.

 Профиль  
                  
 
 Re: Странное поведение оператора if else в языке Си
Сообщение09.10.2018, 06:49 


29/12/13
306
Dmitriy40 в сообщении #1344658 писал(а):
И в примерно 10% (очень навскидку) даже не на С, pure asm, с начала и до конца.


Боюсь спросить, но спрошу. Почему и зачем чистый asm ? Что это за контроллеры ? К ним СИ шного компилятора нет?
Ну, и тогда тем более, если у вас проблема как разбирать строку на СИ, то как вы можете разбирать, обрабатывать, например поток байтов с того же uart .
Или какой-нить tlv разбирать. Я не понимаю.

Dmitriy40 в сообщении #1344658 писал(а):
А что делать если функция вывода строки из DOS-а (№9 в int 21h) берёт на вход именно такие строки

Это тоже так. забыл. Но речь про СИ . printf - стандартная сишная функция берет строки на 0. откуда там возьмутся строки с '$' на конце зачем их создавать ? Но если у вас такие появятся, то их предварительно обработать заменив на ноль, так не судьба? оно - один байт. Зачем два макроса? Что там было про два байта на конце, зачем, откуда ?

-- 09.10.2018, 07:09 --

Munin в сообщении #1344660 писал(а):
if (1 == a) произносил я


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

-- 09.10.2018, 07:11 --

warlock66613 в сообщении #1344154 писал(а):

(Оффтоп)

realeugene в сообщении #1344151 писал(а):
опытные программисты в подобных советах не нуждаются
Ну, те которые этим советам не следуют - очевидно нуждаются.
realeugene в сообщении #1344151 писал(а):
и как правило плюют на подобные советы
Это никак не мешает давать для них такие советы.

 Профиль  
                  
 
 Re: Странное поведение оператора if else в языке Си
Сообщение09.10.2018, 07:56 


29/12/13
306
Dmitriy40 в сообщении #1344260 писал(а):
arseniiv в сообщении #1344253 писал(а):
я (например часто удобно CR+LF таковым считать), во всяком случае в микроконтроллерах (где как раз и памяти часто жалко).

Причем тут CR+LF? Это не строка, не конец строки, это управляющие символы получив их надо что-то сделать. Если файл читаете, то просто читаете в буфер фиксированного размера, кусками не больше этого размера, дальше его парсите, есть для этого в любом языке специальные стандартные функции,
в СИ strok . Если по uart с терминала получаете, можно также в буфер кусками, можно на лету по байту пока их CR не получите как быстрей.
Строка в СИ :
Используется синтаксис C
  char *strrr="12345\r\n" ;
 

она все равно с нулем на конце будет. и ещё с \r\n т.е. как выше 8 байт.

-- 09.10.2018, 08:52 --

Dmitriy40 в сообщении #1344260 писал(а):
А что делать если функция вывода строки из DOS-а (№9 в int 21h) берёт на вход именно такие строки ... Неудачное решение, да.
Что под DOS уже давно никто не пишет - согласен. Однако строки с ненулевым терминатором всё же встречаются (например часто удобно CR+LF таковым считать), во всяком случае в микроконтроллерах (где как раз и памяти часто жалко).


upd.

А ещё вспомнил. в dos была 40h, так вот её и пользовали, а 09h и "$" на конце не пользовали(только в учебниках).
Тут мелкософт исходники дос выложил.
Для примера, из заголовка:
код: [ скачать ] [ спрятать ]
Используется синтаксис ASM
;----- DOS EQUATES --------------------------------------------------;
std_in equ     0                       ;STD input handle
std_out equ     1                       ;STD output handle
std_err equ     2                       ;STD error handle
dos_ent equ     21h                     ;DOS entry point

std_con_string_output equ 9
get_version equ 48
char_oper equ   55                      ;get configuration parameters
open   equ     61                      ;DOS std open code
close   equ     62                      ;DOS std close code
read   equ     63                      ;DOS std read code
write   equ     64                      ;DOS std write code
lseek   equ     66                      ;DOS file seek
exit   equ     76                      ;DOS process exit code

 


непосредственно вывод сообщения:
Используется синтаксис ASM
;--------------------------------------------------------------------;
;               Print string to STD_OUT                              ;
;--------------------------------------------------------------------;
prout:
        mov     bx,std_out
        mov     ah,write  ;; --- мое прим. сюда обратите внимание это 64 (40h)  
        int     dos_ent  ;  
        ret

 


как его используют:
Используется синтаксис ASM
;----- PRINT FILE NAME ----------------------------------------------;
say_name:
        push    ax                      ;save file handle
        mov     dx,offset heading   ; мое прим в dx - сообщение
        mov     cl,cs:heading_len   ;  --- в  cx его длина
        xor     ch,ch                    
        call    prout
 

https://github.com/Microsoft/MS-DOS/blo ... e/FIND.ASM

и дальше сами сообщения, они в отдельный файл вынесены:
Используется синтаксис ASM
heading db      CR,LF,"---------- "  ;;; -- мое прим. никаких $ на конце
heading_len db  $ - heading
 

https://github.com/Microsoft/MS-DOS/blo ... INDMES.ASM

так что вот в dos

 Профиль  
                  
 
 Re: Странное поведение оператора if else в языке Си
Сообщение09.10.2018, 09:07 


29/12/13
306
хотя нет поторопился, тоже использовали, пролистал не заметил в самом начале. когда проверяют версию дос, если не та, то выводят сообщение через 09h и выходят. но это чисто для совместимости с большинством версий, реальный вывод и строки через 64(40h).

 Профиль  
                  
 
 Re: Странное поведение оператора if else в языке Си
Сообщение09.10.2018, 09:34 
Заслуженный участник


02/08/11
6874
Seman в сообщении #1344662 писал(а):
но здешнее сообщество стало настаивать, что и всем хорошо так кодить
Я так говорил про один конкретный совет, и не про "вывернутые" сравнения.
Seman в сообщении #1344640 писал(а):
Линукс и сейчас пишется на том же самом СИ
Вообще-то, на другом. Юникс писался на том, что обычно называется K&R C, а Линукс - на ANSI C или C99 (между этими двумя уже не такое большое различие).
Seman в сообщении #1344640 писал(а):
что такое "унифицировать систему обработки ошибок" применительно к СИ ?
Например, решить, использовать ли errno для возврата ошибок из своих функций.
Seman в сообщении #1344653 писал(а):
А в СИ все стандартные функции заточены, под \0-терминированые строки
Не все. str* - для нуль-терминированных, mem* - для не-терминированных.
Seman в сообщении #1344653 писал(а):
например таже printf начнет выводить дальше пока не наткнется на ноль или на место в памяти откуда ей читать неположенно
Если передать ограничивающий спецификатор - не начнёт.

 Профиль  
                  
 
 Re: Странное поведение оператора if else в языке Си
Сообщение09.10.2018, 09:39 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Seman в сообщении #1344662 писал(а):
Было, что это хорошая практика

И этого я не произносил.

Seman в сообщении #1344662 писал(а):
лень перечитывать тему.

Намного проще продолжать нести чушь.

 Профиль  
                  
 
 Re: Странное поведение оператора if else в языке Си
Сообщение09.10.2018, 09:48 


27/08/16
9426
warlock66613 в сообщении #1344673 писал(а):
Не все. str* - для нуль-терминированных, mem* - для не-терминированных.
Мне очевидно, что Seman писал про стандартные функции для работы со строками. mem* - это функции для работы с блоками памяти. Строки в С/С++ стандартно нуль-терминированные, пытаться отходить от этого соглашения - это искать себе больших приключений. Я могу представить себе, в каких ситуациях это может быть полезно для эффективности (указание на участок в большом тексте в памяти), но в таких случаях лучше чтобы даже не было намёка на то, что это нуль-терминированная строка.

 Профиль  
                  
 
 Re: Странное поведение оператора if else в языке Си
Сообщение09.10.2018, 09:58 
Заслуженный участник


02/08/11
6874
realeugene в сообщении #1344676 писал(а):
Строки в С/С++ стандартно нуль-терминированные
Строки в C/C++ разные. И дело не в эффективности, а в том, что нуль-терминированная строка не может содержать в себе нулевой символ, а это бывает надо: например, нулевой символ может быть в названии файла.

-- 09.10.2018, 10:59 --

realeugene в сообщении #1344676 писал(а):
mem* - это функции для работы с блоками памяти
Как говорится, хоть горшком назови, только в печь не ставь.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 102 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group