Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
18 / 18 / 5
Регистрация: 08.10.2009
Сообщений: 94
1

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

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

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

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

C++
1
2
3
4
5
6
7
int function(...) {
...
if (...)
return NULL;
...
return 12;
}
Возможно ли такое, и будет ли в main(), или в другой функции это нормально восприниматься?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2010, 23:12
Ответы с готовыми решениями:

Вопрос по функциям
Вопрос по функции. мне надо, чтобы моя функция "proverka" принимала значение переменной boo. но на...

Вопрос по функциям
Есть функция: int fun(char wob, unsigned char s, char name, char opis, uint32_t code) {} Я...

Вопрос по классам и функциям
Здравствуйте, вообщем мне надо реализовать примерно такое дело: имеется класс the_class нужно...

Вопрос по функциям класса
class vector { private: double x; double y; double z; public: vector();...

10
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
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;
}
1
18 / 18 / 5
Регистрация: 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)....
0
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
16.03.2010, 23:25 4
Neonjke, ну можно bool использовать..
1
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
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 Но факт остаётся фактом- последний вариант компилятору почему-то не нравится...

Ответ: Нельзя. Непонятно, почему...
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 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.
Или же код просто не скомпилируется.
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
17.03.2010, 22:22 7
м... Ну, так Вы, наверное, знаете уже, может ответите? ПОчему когда в тексте проги пишешь
#define NULL 0, прога компилится нормально и возвращается NULL как int

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

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

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

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

Добавлено через 38 секунд
Я вот не знаю, в чём дело
Я тоже не знаю.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
19.03.2010, 08:42 10
да, EOF меньше нуля

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

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

а конец файла (когда getc возвращает EOF) проверяют через ferror(), ещё feof()
эти флажки хранятся в структуре FILE
0
Эксперт С++
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
19.03.2010, 17:37 11
А бывает ещё std::pair<bool, int>, чтобы избежать извращений.
0
19.03.2010, 17:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2010, 17:37
Помогаю со студенческими работами здесь

Вопрос по встраиваемым функциям
В книге прочитал, что если объявить функцию как inline, то код самой функции при компиляции...

Алюанский вопрос по функциям
Господа и прекрасные дамы...!!! Решил заняться программированием на досуги...книжки умные...

Задачи по функциям. Объясните задачу по функциям)
Вводится последовательность из N целых чисел. Для каждого числа последовательности вывести новое...

вопрос по функциям в Mathcad
мне нужно выполнить для некоторого числа взятие по модулю, не могу найти такую функцию в Маткаде,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru