cpp-ru/ideas

Добавить функциям имя возвращаемого значения

perfectGenius opened this issue · 4 comments

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

int [код_ошибки] прочитать_файл_в_память(UINT начало, UINT конец)
или
return [код_ошибки] ФАЙЛ_ПУСТОЙ

int /* sum */ sum(int a, int b) типа того что ли? Кажется существующих языковых выразительных средств уже достаточно. IDE умеют вытаскивать doxygen комментарии во всплывающие подсказки.

int /* sum */ sum(int a, int b)

Проверил в VS2022, не показывает.

doxygen

Кроме языка надо ещё учить целую отдельную систему, просто отлично.
И даже с существованием таких средств Visual Studio почему-то мне не показывает, что printf() возвращает количество напечатанного. Т.е. есть какая-то причина, почему они не стали стандартом.
Всё это выглядит костылями, хотя имя возвращаемого для меня кажется фундаментальной частью языков наравне с именами параметров.

Имя функции описывает имя возвращаемого значения. Если это не так, то возвращаемое значение - не самое главное в функции и читайте что-то за пределами кода

Если вам нужна гибкость и информативность используйте структуры для описания сложных, настраиваемых функций или функций с контекстами:

struct adc {
	unsigned a,b,c; // input
	unsigned r,f;   // output
	adc& run() {    // body
		r=a+b+(c&1); f=0;
		unsigned s=~(~((unsigned)0)>>1);
		if (r<a || r<b) f|=1;
		if ((a&s)==(b&s) && ((a&s)!=(r&s))) f|=2;
		return *this;
	}
	unsigned result() const { return r; }
	bool unsigned_overflow() const { return f&1; }
	bool signed_overflow() const { return f&2; }
};

#include <stdio.h>
int main(int argc, char const *argv[]) {
	unsigned smax=~((unsigned)0)>>1;
	printf("0x%08X\n",adc{smax,1,1}.run().result());
}