Сишные функции работы со строками

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

Вообчето в С(имется в виду язык) никогда не было операций со строками. Все реализуется библиотечными функциями. Единственная фукция это sizeof(*) (поправьте меня). А по поводу строк...
Я в DOS(-оветские времена) нарисовал в ++ класс(С++) работы со сроками.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Ну стандартные сишные библиотеки вроде как часть языка (см. стандарт ANSI-C).

А sizeof только размер указателя даст, не размер строки...
Я тут за главного - если что шлите мыло на me собака shaos точка net
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

Если мне нужно было только копирование строки, то я обходился самописными суррогатами и не подключал библиотеку.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

jdigreze wrote:Если мне нужно было только копирование строки, то я обходился самописными суррогатами и не подключал библиотеку.
Сорри - но это уж совсем дико, если таковые библиотеки есть. :roll:
А если они есть, то почему их не сделать удобными для пользователя языка?

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

Собственно, С-то и придумали, чтобы иметь язык с объемом информационного слова покрупнее чем
в ассемблере, хотя но не столь, как в ЯВУ, и не имеющий сильной привязки к типу процессора.

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

У меня лично сильное подозрение, что как в С, так и в Паскале некоторые неудобства имеют место
с целью упрощения компилятора - часть его обязанностей возложили на программиста - пусть сам следит.
iLavr
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

Lavr wrote:Сорри - но это уж совсем дико, если таковые библиотеки есть. :roll:
А если они есть, то почему их не сделать удобными для пользователя языка?
Меня это не пугает. Я скотину ножом али топором валю без трепыхания души. Что довольно многим может показаться более диким.
Lavr wrote:Собственно, С-то и придумали, чтобы иметь язык с объемом информационного слова покрупнее чем
в ассемблере, хотя но не столь, как в ЯВУ, и не имеющий сильной привязки к типу процессора.
И чего-енто мне кажется (крестить ся не буду), что С таки придумали не для того. Была вот у чуваков задачка написать некое обеспечЕние для некоего оборудования, вот и решили написать для коего некую абстракцию, и воплотили оное. А вон оно как обернулось. Да и хрен с имями.
В моём скромном - пользовать абстракцию аки есмь, и приспособлять оную под свои скромные нужды.

P.S. Я отдаю себе отчёт в том, что мои суррогаты порой совсем не оптимальны с точки зрения компиляции и выполнения, но... говнокодерство порой процветает! ;)
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

jdigreze wrote:
Lavr wrote:Сорри - но это уж совсем дико, если таковые библиотеки есть. :roll:
А если они есть, то почему их не сделать удобными для пользователя языка?
Меня это не пугает. Я скотину ножом али топором валю без трепыхания души.
А я и не говорю, что пугает - я говорю об удобстве.
Есть люди делают кругосветку на велосипедах, воздушных шарах и одиночных яхтах.
Но большинство пользуются автомобилем, самолетом и параходом.

Я, к примеру, могу написать программу в машинных кодах в HEX-редакторе - начинал с этого,
но предочитаю ассемблер с мнемониками, и макросредства тоже очень нефиговы.

Так что я говорю об удобстве прежде всего.

И два чувака думали подумали об своем удобстве, чтобы не писать на ассме - а уж потом:
"вон оно как обернулось". :wink:

Собственно и сам микропроцессор выдумали для удобства - не запиливать большой комплект
ИС в конкретном случае.
iLavr
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

Видимо это связано со стилем жизни. Как это ни странно, но я предпочитаю на велосипеде, в прямом смысле. Надеюсь доделаю монтаж предыдущих заездов, так в курилке ссылки выкложу.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

jdigreze wrote:Как это ни странно, но я предпочитаю на велосипеде, в прямом смысле.
На даче я тоже, бывает, с удовольствием катаюсь на велосипеде.
Но до дачи добираюсь отнюдь не на нем, а уж если в командировку,
то и на поезде езжу. :wink:

Думаю, что в Москву "на велосипеде, в прямом смысле" ты тоже вряд ли предпочитаешь.


Но что-то мы далеко ушли от неудобных строковых функций С со всеми этими аналогиями.
Я же начал топик со следующего:
Lavr wrote:Вот что я ненавижу в С - так это строковые функции...
Но я же не призывал всех как к их ненависти, так и обожествлению? :wink:
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Сишные функции работы со строками

Post by Lavr »

Я тут надумал поковырять код Best_C на повод как написан компилятор Си, и заодно почитываю
Интернет на вопрос как примерно устроены компиляторы Си.

И вот какой у меня вопрос возник, видимо, к Shaos-у: а почему у Си синтаксис и набор собственных
операторов весьма скромный, а всё делается через библиотеки?

Си ведь даже ввод-вывод не может сделать без библиотек... :-?
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Сишные функции работы со строками

Post by Shaos »

Ну это наверное к создателям языка надо идти - я в 1992 году принял Си как данность :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Сишные функции работы со строками

Post by Lavr »

Ну тогда подскажи, как в Си назначить синоним функции и можно ли это в принципе?

В VB это делается примерно вот так:

Code: Select all

Declare Function Out Lib "portio.dll" Alias "PUTByteOut" (ByVal port%, ByVal pdata%) As Integer
Declare Function Inp Lib "portio.dll" Alias "GETByteIn" (ByVal port%) As Integer
Перерыл кучу интернета и ничего не нашел на этот повод. :-?

Нашел, что можно назначить синоним типу данных, но это я и так знал.
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Сишные функции работы со строками

Post by Shaos »

На уровне линкера точка входа в функцию будет называться именем функции с подчёркиванием в начале

Если надо чтобы на уровне программы другая функция называлась иначе в пределах ограниченной области видимости просто делаешь #define NEWNAME OLDNAME ;)

P.S. Если хочется не на уровне компиляции, а динамически по ходу выполнения программы менять функции, которые выполняются из под того же самого места, то можно указатели на функции задействовать...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Сишные функции работы со строками

Post by Lavr »

Lavr wrote:...у меня вопрос возник, видимо, к Shaos-у: а почему у Си синтаксис и набор собственных
операторов весьма скромный, а всё делается через библиотеки?
А Си-шные библиотеки на Си написаны или на целевом ассемблере конкретной машины?

Крутится мысль у меня в голове... вроде умная... никак не родится... :wink:
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Сишные функции работы со строками

Post by Shaos »

Ну кто как пишет - главное чтобы стандарту соответствовало ;)
Например в newlib из линуха всё на сях написано для портабельности
А вот например в версии GCC для микроспарков все функции пересылок были переписаны на ассемблере спарка, чтобы по 64-битной шине сразу по 8 байт данных кидать за раз...
Я тут за главного - если что шлите мыло на me собака shaos точка net