Названия системных функций

High-level languages programming questions
  • Подожди, названия ещё не утвердили.
    Зачем функции? KOSfuncs.h можно сделать в виде макросов.
  • Pathoswithin wrote:Подожди, названия ещё не утвердили.
    Хорошо! Сообщайте когда утвердите!
    Pathoswithin wrote:Зачем функции? KOSfuncs.h можно сделать в виде макросов.
    В виде макросов, говоришь!?.... :-) в виде таких макросов на который нарвался я ?! :D :lol:
  • Обертки делай в виде функций.
    В Си нет процедур. Для возврата нескольких значений из функции используется передача параметров по ссылке, т.е. с указанием операции взятия адреса & перед именем параметра. Либо возврат структуры, объекта, указателя через return.
  • Ray wrote:Для возврата нескольких значений из функции используется передача параметров по ссылке, т.е. с указанием операции взятия адреса & перед именем параметра
    Увы, это возможно для C++, но не для C. А вот передача параметров по указателю более универсальная
  • ALEXS1983 wrote:Я Си знаю плохо, поверхностно, но насколько я понял, что в данном случае результат возвращается и через саму функцию kos_GetKey и через "байт в скобках" ( Byte &keyCode ). Я такого никогда не делал (хотя знаю, что это вполне допустимо), для меня подобное выгладит дико! Т.е. в моём понимании, функцию используют, только для получения(возвращения) одного единственного параметра, через имя самой функции. В остальных случаях, применяется процедура.
    Поэтому в данном случае должно быть либо две функции
    bool GetKeyStatus и Byte GetKeyCode (надеюсь правильно написал для СИ)
    либо одной процедурой GetKey (bool Status ,Byte KeyCode) (надеюсь правильно написал для СИ) где Status и KeyCode могут быть использованный как для входных и возвращающихся данных из процедуры.
    Считаю нормальным возврат из функции в виде структуры (записи) содержащей в себе поля Status и KeyCode, но в данном случае, это неудобно да и не нужно! Не тот случай!
    А что, в дельфи уже нельзя написать function GetKey(var keyCode: byte): boolean; или как оно там?
    Эта функция достаёт очередную клавишу из очереди, продвигая при этом очередь, и возвращает признак успеха: true, если получилось, и false, если нет. Если ты предлагаешь две функции, ты просто не понимаешь, что происходит.
    Сделаем мир лучше!
  • Хорошо, тогда... функции versus макросы.

    Код макросов будет выглядеть так:

    push ebx
    mov eax, funcNumber
    mov ebx, subFuncNumber
    mov ecx, [a]
    mov edx,
    int 40h
    mov [c], eax
    mov [d], ebx
    pop ebx

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

    push d
    push c
    push
    push [a]
    call funcName

    но в программу будет включатся код функции (всех функций подключаемого файла, насколько я понимаю), который соответствует коду макроса.
  • ALEXS1983 wrote:(Вот только жаль функции нельзя присвоить в том массив процедур, и отдельный массив функций нельзя создать, в частности в Дельфи7)
    Что, правда нельзя? В Си - запросто:

    Code: Select all

    typedef unsigned char Byte; // Byte = unsigned char
    typedef Byte (*MyFunctionType)(void); // MyFunctionType = pointer to any function that takes no parameters and returns Byte
    MyFunctionType funcArray[201];
    Byte Test(void) { return 42; }
    funcArray[3] = &Test;
    
    Только это неприменимо к данной теме. Массивы подразумевают, что все их элементы однотипны, а системные функции принимают и возвращают сильно разное число аргументов сильно разных типов.
    Сделаем мир лучше!
  • SF_AUDIO -> SF_PC_SPEAKER. Нормальное аудио совсем не здесь.
    SF_SERVISES -> SF_SYS_SERVICE. Хотя с учётом разнообразия подфункций это скорее даже SF_MISC, miscellaneous.
    Названия SSF_* порой слишком общие. SSF_MAP? Для фонового рисунка? Что, если в файловой системе появится операция map типа mmap/MapViewOfFile?
    В APLLY опечатка, в SSF_КX_PACKET_COUNT русская К вместо R, если используется форма прошедшего времени received, а не начальная receive, то должно быть и sent вместо send.
    Сделаем мир лучше!
  • должно быть и sent вместо send
    Надо же, из документации копипастил...
    Названия SSF_* порой слишком общие
    Ну одно короткое имя вполне может быть, а уже следующее придётся делать более конкретным. Если такой подход тебя не устраивает, то какие удлинять? Все из одного слова?
  • CleverMouse wrote: А что, в дельфи уже нельзя написать function GetKey(var keyCode: byte): boolean; или как оно там?
    Да писать то можно! Но я же говорю, что выглядит это дико! Я сколько пересматривал примеров и частей кода по дельфи, не помню, чтобы мне такое попадалось на глаза!
    Ну да ладно!... :-) Принимайте "в печать"! Пусть будет!
  • Ладно, тогда вот так.
  • revision #6000
    Названия утверждены. Теперь можно делать стандартный KOSfuncs.h для сей.
  • Pathoswithin wrote:revision #6000
    Названия утверждены. Теперь можно делать стандартный KOSfuncs.h для сей.
    Ну и ?!..... Чего ждём ?! :-) Окончания новогодних праздников ? :-)
    Или зачинщика который этим займётся ?! :-)
    Могу заняться. Но... для дельфи, а после "перевести" программкой "Delphi2Cpp" на Си, так пойдёт ? Пробное кидать ?
  • Кидай, просто список имен, без реализации. Как утвердятся имена, можно будет и заголовочные файлы переписывать.
    to infinity and beyond
  • Who is online

    Users browsing this forum: No registered users and 0 guests