strcpy() return value

A lot of the functions from the standard C library, especially the ones for string manipulation, and most notably strcpy(), share the following prototype:

char *the_function (char *destination, ...)

The return value of these functions is in fact the same as the provided destination. Why would you waste the return value for something redundant? It makes more sense for such a function to be void or return something useful.

My only guess as to why this is is that it's easier and more convenient to nest the function call in another expression, for example:

printf("%s\n", strcpy(dst, src));

Are there any other sensible reasons to justify this idiom?

26
задан Blagovest Buyukliev 24 August 2010 в 22:07
поделиться

4 ответа

как указал Эван, можно сделать что-то вроде

char* s = strcpy(malloc(10), "test");

, например. присвоить malloc () память значение без использования вспомогательной переменной.

(этот пример не лучший, он вылетает из-за нехватки памяти, но идея очевидна)

22
ответ дан 28 November 2019 в 07:49
поделиться

Я считаю, что ваше предположение верное, это упрощает вложенный вызов.

5
ответ дан 28 November 2019 в 07:49
поделиться

Та же концепция, что и у Fluent Interfaces. Просто сделать код быстрее/легче для чтения.

0
ответ дан 28 November 2019 в 07:49
поделиться

Его также очень легко кодировать.

Возвращаемое значение обычно остается в регистре AX (это не обязательно, но часто бывает). И место назначения помещается в регистр AX при запуске функции. Чтобы вернуть пункт назначения, программисту нужно сделать... ровно ничего! Просто оставьте значение там, где оно есть.

Программист может объявить функцию как void. Но это возвращаемое значение уже находится в нужном месте, просто ждет, когда его вернут, и для его возврата даже не требуется дополнительная инструкция! Каким бы малым ни было улучшение, в некоторых случаях оно бывает полезным.

1
ответ дан 28 November 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: