Идиома возврата точного значения одного из аргументов (типа указателя) существует для поддержки "связанных" вызовов функций (см. также strcpy
, strcat
и т. д.). Это позволяет вам писать повторяющийся код в виде одного оператора выражения вместо того, чтобы разбивать его на несколько операторов. Например
char buffer[1024];
printf("%s\n", strcat(strcat(strcpy(buffer, "Hello"), " "), "World"));
struct UserData data_copy;
some_function(memcpy(&data_copy, &original_data, sizeof original_data));
Даже если вам не нравится такой стиль организации кода и вы предпочитаете делать то же самое с помощью нескольких операторов, накладные расходы на возврат [ненужного] значения указателя практически отсутствуют.
Можно даже сказать, что значение этой идиомы немного возросло после введения составных литералов в C99. С составными литералами именно эта идиома позволяет писать тот же код, не вводя именованную промежуточную переменную.
printf("%s\n", strcat(strcat(strcpy((char [1024]) { 0 }, "Hello"), " "), "World!"));
some_function(memcpy(&(struct UserData) { 0 }, &original_data, sizeof original_data));
что имеет смысл, поскольку в большинстве случаев предполагается, что именованная переменная недолговечна, впоследствии не нужна и только загромождает пространство имен.
person
AnT
schedule
12.10.2016