Почему Windows API предлагает 2 способа «возврата» значений? - PullRequest
0 голосов
/ 08 января 2019

Например, , GetWindowThreadProcessId() принимает 2 значения, дескриптор окна и указатель, который получает возвращаемое значение (функция также всегда returns значение).

Какой смысл иметь оба варианта? И когда мне следует использовать указатель для «возврата» значения по сравнению с его фактическим возвратом?

1 Ответ

0 голосов
/ 08 января 2019

Они не одно и то же.

«Аргумент out» получает идентификатор процесса. Возвращаемым значением является идентификатор потока.

Реальный вопрос заключается в том, почему два отдельных механизма «дают мне ценность» используются вообще. Вы могли бы подумать, что два «аргумента» могут быть более последовательными.

Ответ: люди. Мы совершаем ошибки. Мы создаем противоречивые API. Это случается.

Кто-то решил, что для возврата нет кода ошибки, поэтому вы также можете использовать возвращаемое значение. Но, к сожалению, нам нужно что-то еще вернуть, а в C нет кортежей, поэтому давайте вместо этого будем использовать аргумент out.

Мы иногда называем такие вещи "историческими причинами". Ваш пробег может отличаться.

Я могу сказать вам, что лично я не разработал бы эту функцию, скажем, в современном C ++. Но это сейчас, в 2018 году, и я не делаю операционные системы (oof, вы можете себе представить? ??).

В конце концов, честно говоря, никакого вреда не было.

...