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

Как объявить функцию без прототипа - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 20:15     Как объявить функцию без прототипа #1
Во всех учебниках пишут, что каждая функция должна иметь прототип. ВОт стало интересно, можно ли объявить функцию, которая не имеет прототип. Если да, то как? Покажите.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
01.09.2012, 20:20     Как объявить функцию без прототипа #2
C++
1
2
3
4
5
6
7
8
9
10
11
void func (); //прототип
 
int main()
{
   ....
}
 
void func() //основное тело функции
{
  ...
}
C++
1
2
3
4
5
6
7
8
9
void func()  //начинка сразу
{
  ...
}
 
int main()
{
   ....
}
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 20:37  [ТС]     Как объявить функцию без прототипа #3
Во 2 случае прототип функции одновременно является его определением. А надо совсем без прототипа.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
01.09.2012, 20:39     Как объявить функцию без прототипа #4
Цитата Сообщение от bgm313 Посмотреть сообщение
А надо совсем без прототипа.
кому надо?
и зачем?
PSIAlt
 Аватар для PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
01.09.2012, 20:41     Как объявить функцию без прототипа #5
Цитата Сообщение от bgm313 Посмотреть сообщение
Во 2 случае прототип функции одновременно является его определением. А надо совсем без прототипа.
Полагаю в строго типизированном языке у тебя так не получится
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
01.09.2012, 20:46     Как объявить функцию без прототипа #6
Цитата Сообщение от bgm313 Посмотреть сообщение
ВОт стало интересно, можно ли объявить функцию, которая не имеет прототип. Если да, то как?
элементарно
не вызывать её
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 20:48     Как объявить функцию без прототипа #7
C++ ещё не настолько монструозный крутой, чтобы выводить и типы функций.
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 20:57  [ТС]     Как объявить функцию без прототипа #8
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
C++ ещё не настолько монструозный крутой, чтобы выводить и типы функций.
Что вы имеете в виду?
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
01.09.2012, 20:58     Как объявить функцию без прототипа #9
Мож #define подойдет ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
#define  MAX(x,y) ((x)>(y))?(x):(y)
 
int main()
{
 
    int  a = 25, b = 55, c;
 
     c = MAX( a, b );
 
     std::cout << c << std::endl;
 
    return ( 0 );
 
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.09.2012, 21:05     Как объявить функцию без прототипа #10
bgm313, Это на кой фиг такое нужно? Ответ : НЕТ.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 21:12     Как объявить функцию без прототипа #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от bgm313 Посмотреть сообщение
Что вы имеете в виду?
Я имею в виду, что если C++11 ещё умеет (более-менее) автоматически выводить типы переменных при компиляции (auto), то точно так же выводить типы функции для него ещё слишком круто.

Я ж так понял, это для того, чтобы не писать прототипы руками? Если нет, то вы точно пошли куда-то не туда.

Или ваш вопрос попадает под разряд: "Во всех учебниках пишут, что отрицательные числа записываются со знаком минус в начале. Возник вопрос: а можно ли писать без знака минус?" Ответ: да. В общем случае. Записать как unsigned в дополнительном коде и трактовать как signed. Тот же самый ответ для функций: можно, с помощью вагона ассемблерных вставок можно определить функцию прям в мейне, но запихивать аргументы в стек и делать goto в тело функции и обратно придётся руками.

Это слишком широкий вопрос.
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 21:14  [ТС]     Как объявить функцию без прототипа #12
Цитата Сообщение от MrCold Посмотреть сообщение
Мож #define подойдет ?
Может быть для define функции, тоже где-то прототип неявно объявляется?
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
01.09.2012, 21:15     Как объявить функцию без прототипа #13
Может быть для define функции, тоже где-то прототип неявно объявляется?
#define определяет макрос, ничего общего с функциями у него нет. Это реализовано на уровне препроцессора, а не языка C++.
PSIAlt
 Аватар для PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
01.09.2012, 21:18     Как объявить функцию без прототипа #14
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Я имею в виду, что если C++11 ещё умеет (более-менее) автоматически выводить типы переменных при компиляции (auto), то точно так же выводить типы функции для него ещё слишком круто.
Ну почему же, ты же можешь написать
C++
1
auto func = [](int x) -> int { return x+5; };
Соттветвенно тип func автоматом определится как int (*func)(int x)
Аналогично можно скопировать тип переменной не зная его, например так:
C++
1
2
int a=5;
decltype(a) b=7;
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
01.09.2012, 21:20     Как объявить функцию без прототипа #15
bgm313, для тебя сначала стоит уяснить что такое прототип.
Прототип - это описание функции без её тела.
В примере от Dani это четко показано.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 21:21     Как объявить функцию без прототипа #16
Цитата Сообщение от PSIAlt Посмотреть сообщение
Ну почему же, ты же можешь написать
C++
1
auto func = [](int x) -> int { return x+5; };
Соттветвенно тип func автоматом определится как int (*func)(int x)
Я имею в виду вывести. Чтобы вообще не писать кусок (int x) -> int, в котором прописаны типы аргументов и возвращаемого значения. Исключительно по телу функции.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.09.2012, 21:22     Как объявить функцию без прототипа #17
Цитата Сообщение от PSIAlt Посмотреть сообщение
Ну почему же, ты же можешь написать
C++
1
auto func = [](int x) -> int { return x+5; };
Соттветвенно тип func автоматом определится как int (*func)(int x)
Аналогично можно скопировать тип переменной не зная его, например так:
C++
1
2
int a=5;
decltype(a) b=7;
Неверно. func не будет тем, что вы сказали. closure это совершенно отдельный тип, не указатель на функцию.

The type of the lambda-expression (which is also the type of the closure object) is a unique, unnamed nonunion
class type — called the closure type
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 21:25  [ТС]     Как объявить функцию без прототипа #18
auto func = [](int x) -> int { return x+5; };

Если можно пояснить что это за конструкция или сказать что почитать?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.09.2012, 21:27     Как объявить функцию без прототипа #19
Цитата Сообщение от bgm313 Посмотреть сообщение
можно ли объявить функцию, которая не имеет прототип
Прототип и есть объявление. Можно ли объявить не объявляя?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2012, 21:27     Как объявить функцию без прототипа
Еще ссылки по теме:

Как объявить функцию, которая имеет место быть только в некоторых дочерних классах, а базовый класс абстрактный? C++
C++ Объявить массив? Запросто! Объявить массив массивов? А как это?
C++ Можно ли объявить дружественную функцию как шаблон?

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.09.2012, 21:27     Как объявить функцию без прототипа #20
bgm313, Лямбда функция. С++11. Почитать в стандарте С++11 или у Саттера или в книге по С++11.

Вкратце: http://ru.wikipedia.org/wiki/C%2B%2B...BD.D0.B8.D1.8F
Yandex
Объявления
01.09.2012, 21:27     Как объявить функцию без прототипа
Ответ Создать тему
Опции темы

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