идиома возвращения точного значения одного из аргументов (типа указателя) существует для поддержки «цепных» вызовов функций (см. также 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. С компаундом lterals это очень идиома позволяет писать один и тот же код без введения имени промежуточного переменной
printf("%s\n", strcat(strcat(strcpy((char [1024]) { 0 }, "Hello"), " "), "World!"));
some_function(memcpy(&(struct UserData) { 0 }, &original_data, sizeof original_data));
, которая имеет смысл, так как в большинстве случаев, названных переменным должен быть кратковременными, не нужна потом, и только загромождает пространство имен.
Отлично, мне придется откладывать обед, чтобы увидеть ответ на этот вопрос ... :) Я подозреваю, что последнее ваше предложение - это случай. – gsamaras
"... вернуть другой указатель, чем dest?" -> С UB все возможно, иначе нет. – chux
Возможный дубликат: http://stackoverflow.com/questions/13720428/whats-the-use-of-memset-return-value –