Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Neonjke
18 / 18 / 1
Регистрация: 08.10.2009
Сообщений: 94
#1

Вопрос по функциям - C++

16.03.2010, 23:12. Просмотров 874. Ответов 10
Метки нет (Все метки)

Скажите, если у функции в заголовке прописано, что она возвращает значение int:

C++
1
2
int function(...) {
...}
То могу ли я пытаться вернуть из этой функции NULL, т.е.

C++
1
2
3
4
5
6
7
int function(...) {
...
if (...)
return NULL;
...
return 12;
}
Возможно ли такое, и будет ли в main(), или в другой функции это нормально восприниматься?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1234 / 772 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
16.03.2010, 23:15     Вопрос по функциям #2
А не лучше что нибудь типа такого сделать:
C++
1
2
3
4
5
6
7
#define M_OK 0
#define M_ERROR 1
int function (){
//...
if(...) return M_ERROR;
return M_OK;
}
Neonjke
18 / 18 / 1
Регистрация: 08.10.2009
Сообщений: 94
16.03.2010, 23:20  [ТС]     Вопрос по функциям #3
Цитата Сообщение от Genius Ignat Посмотреть сообщение
А не лучше что нибудь типа такого сделать:
C++
1
2
3
4
5
6
7
#define M_OK 0
#define M_ERROR 1
int function (){
//...
if(...) return M_ERROR;
return M_OK;
}
мне не нужно, чтобы функция вернула число (она и при своей нормальной работе может вернуть любое число в диапазоне int)
мне нужно, чтобы функция вернула что-то отличное от числа (как NULL), и чтобы в main() я мог вставить проверку a=funt(); if (a = NULL)....
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
16.03.2010, 23:25     Вопрос по функциям #4
Neonjke, ну можно bool использовать..
kravam
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,338
16.03.2010, 23:51     Вопрос по функциям #5
Вопрос, признаться, поставил меня в тупик.
Я провёл такое исследование. Пишу:
C++
1
2
3
4
#define NULL 0
int main(){
 return NULL;
}
Компилирую, всё работает превосходно.

Теперь вспоминаю, что NULL уже ГДЕ-ТО ОПРЕДЕЛЕНА. Ищу этот файл, он называется windef.h, открываю, нахожу там вот это:
C++
1
2
3
4
5
6
7
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void*)0)
#endif
#endif
Там, не мудрствуя луквао, закомментирываю всю эту свадьбу, оставляю только нужную строку. То есть так:
C++
1
2
3
4
5
6
7
8
9
10
//#ifndef NULL
//#ifdef __cplusplus
 
//Вот эту строку оставляю
#define NULL 0
 
//#else
//#define NULL ((void*)0)
//#endif
//#endif
Всё! Теперь подключаю заголовочный файл windef.h, пребывая в уверенности, что всё корректно сработает, как в первый раз! Действительно, мы сейчас в этом файле имеем всего одну нужную строчку. Но вот этот код
C++
1
2
3
4
#include <windef.h>
int main(){
 return NULL;
}
НЕ срабатывает! Выдаёт предупреждение. Почему- ума не приложу. И первом и в последнем случае всё одинаково за исключением того, что в первом NULL определена в тексте программы, а в последнем- в файле windef.h Но факт остаётся фактом- последний вариант компилятору почему-то не нравится...

Ответ: Нельзя. Непонятно, почему...
odip
Эксперт С++
7153 / 3293 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
17.03.2010, 22:10     Вопрос по функциям #6
NULL вообще-то много где может быть определен - не только в windef.h
И вообще я бы не занимался переименованием такой специфической вещи как NULL

Возможно ли такое, и будет ли в main(), или в другой функции это нормально восприниматься?
мне не нужно, чтобы функция вернула число (она и при своей нормальной работе может вернуть любое число в диапазоне int)
мне нужно, чтобы функция вернула что-то отличное от числа (как NULL),
Ошибка состоит в том, что ты считаешь что NULL не является числом.

Если у функции написано int function(), то ничего другого кроме int функция вернуть просто не может.
То есть NULL будет тем или иным образом преобразован в int,
представлен в виде числа и все равно возвращаемое значение будет int.
Или же код просто не скомпилируется.
kravam
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,338
17.03.2010, 22:22     Вопрос по функциям #7
м... Ну, так Вы, наверное, знаете уже, может ответите? ПОчему когда в тексте проги пишешь
#define NULL 0, прога компилится нормально и возвращается NULL как int

А когда #define NULL 0 прописано в подключаемом файле, не компилится?
Я вот не знаю, в чём дело, вынужден эксперементировать, изголяться всяко, дабы до ответа докопаться...
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.03.2010, 09:11     Вопрос по функциям #8
Цитата Сообщение от Neonjke
Возможно ли такое, и будет ли в main(), или в другой функции это нормально восприниматься?
NULL - это указатель

он используется, когда функция возвращает указатель (любого порядка)
для int используется EOF

scanf, getchar, fputs возвращают EOF в случае ошибки
printf возвращает отрицательное число
все эти функции возвращают int

fgets возвращает NULL
она возвращает char *
odip
Эксперт С++
7153 / 3293 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
19.03.2010, 07:58     Вопрос по функциям #9
для int используется EOF
EOF определен как -1
Так что если потребуется вернуть -1, то будут проблемы - различить -1 и EOF не получится.

Добавлено через 38 секунд
Я вот не знаю, в чём дело
Я тоже не знаю.
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.03.2010, 08:42     Вопрос по функциям #10
да, EOF меньше нуля

ещё бывает isdigit()
ноль в случае, когда ложь и не ноль, когда истина

бывает ещё errno
случай с strtol, при переполнении она возвращает LONG_MAX, но и правильный результат тоже может быть LONG_MAX
проверить это можно через errno - глобальная переменная

а конец файла (когда getc возвращает EOF) проверяют через ferror(), ещё feof()
эти флажки хранятся в структуре FILE
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2010, 17:37     Вопрос по функциям
Еще ссылки по теме:

Консультация по функциям C++
Задачи по функциям. Объясните задачу по функциям) C++
C++ Пояснение к функциям
Задача по функциям C++
C++ Расписать по функциям

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1602 / 994 / 118
Регистрация: 27.09.2009
Сообщений: 1,918
Завершенные тесты: 1
19.03.2010, 17:37     Вопрос по функциям #11
А бывает ещё std::pair<bool, int>, чтобы избежать извращений.
Yandex
Объявления
19.03.2010, 17:37     Вопрос по функциям
Ответ Создать тему
Опции темы

Текущее время: 10:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru