Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
perfectGenius opened this issue May 8, 2024 · 4 comments

Comments

@perfectGenius
Copy link

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

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

@tomilov
Copy link

tomilov commented May 8, 2024

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

@perfectGenius
Copy link
Author

perfectGenius commented May 9, 2024

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

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

doxygen

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

@vtopunov
Copy link

vtopunov commented May 10, 2024

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

@kov-serg
Copy link

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

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());
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants