12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
1

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

01.09.2012, 20:15. Показов 3381. Ответов 24
Метки нет (Все метки)

Во всех учебниках пишут, что каждая функция должна иметь прототип. ВОт стало интересно, можно ли объявить функцию, которая не имеет прототип. Если да, то как? Покажите.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2012, 20:15
Ответы с готовыми решениями:

Как без цикла объявить?
ArrayList mat = new ArrayList; //как не делать этот цикл? for(int i=0;i<n;i++) { mat=new...

Как объявить функцию?
Подскажите, пожалуйста, как функцию function valid(idx) { var el =...

Как объявить переменную без присвоения ей значения?
Вопрос нубский, но все же как быть в ситуации когда необходимо просто объявить о существовании...

Как объявить friend функцию класса
как это оформить, чтобы работало // ----------> one.h #include "two.h" #ifndef ONE_H_INCLUDED...

24
1404 / 646 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
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()
{
   ....
}
0
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 20:37  [ТС] 3
Во 2 случае прототип функции одновременно является его определением. А надо совсем без прототипа.
0
Модератор
Эксперт по электронике
8698 / 6496 / 879
Регистрация: 14.02.2011
Сообщений: 22,719
01.09.2012, 20:39 4
Цитата Сообщение от bgm313 Посмотреть сообщение
А надо совсем без прототипа.
кому надо?
и зачем?
1
87 / 87 / 1
Регистрация: 19.06.2012
Сообщений: 245
01.09.2012, 20:41 5
Цитата Сообщение от bgm313 Посмотреть сообщение
Во 2 случае прототип функции одновременно является его определением. А надо совсем без прототипа.
Полагаю в строго типизированном языке у тебя так не получится
0
Модератор
Эксперт по электронике
8698 / 6496 / 879
Регистрация: 14.02.2011
Сообщений: 22,719
01.09.2012, 20:46 6
Цитата Сообщение от bgm313 Посмотреть сообщение
ВОт стало интересно, можно ли объявить функцию, которая не имеет прототип. Если да, то как?
элементарно
не вызывать её
2
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 20:48 7
C++ ещё не настолько монструозный крутой, чтобы выводить и типы функций.
0
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 20:57  [ТС] 8
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
C++ ещё не настолько монструозный крутой, чтобы выводить и типы функций.
Что вы имеете в виду?
0
871 / 769 / 173
Регистрация: 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 );
 
}
1
В астрале
Эксперт С++
8042 / 4799 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
01.09.2012, 21:05 10
bgm313, Это на кой фиг такое нужно? Ответ : НЕТ.
0
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 21:12 11
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от bgm313 Посмотреть сообщение
Что вы имеете в виду?
Я имею в виду, что если C++11 ещё умеет (более-менее) автоматически выводить типы переменных при компиляции (auto), то точно так же выводить типы функции для него ещё слишком круто.

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

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

Это слишком широкий вопрос.
3
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 21:14  [ТС] 12
Цитата Сообщение от MrCold Посмотреть сообщение
Мож #define подойдет ?
Может быть для define функции, тоже где-то прототип неявно объявляется?
0
527 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
01.09.2012, 21:15 13
Может быть для define функции, тоже где-то прототип неявно объявляется?
#define определяет макрос, ничего общего с функциями у него нет. Это реализовано на уровне препроцессора, а не языка C++.
0
87 / 87 / 1
Регистрация: 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;
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
01.09.2012, 21:20 15
bgm313, для тебя сначала стоит уяснить что такое прототип.
Прототип - это описание функции без её тела.
В примере от Dani это четко показано.
0
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 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, в котором прописаны типы аргументов и возвращаемого значения. Исключительно по телу функции.
1
В астрале
Эксперт С++
8042 / 4799 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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
0
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 21:25  [ТС] 18
auto func = [](int x) -> int { return x+5; };

Если можно пояснить что это за конструкция или сказать что почитать?
0
5488 / 4883 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.09.2012, 21:27 19
Цитата Сообщение от bgm313 Посмотреть сообщение
можно ли объявить функцию, которая не имеет прототип
Прототип и есть объявление. Можно ли объявить не объявляя?
0
В астрале
Эксперт С++
8042 / 4799 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
01.09.2012, 21:27 20
bgm313, Лямбда функция. С++11. Почитать в стандарте С++11 или у Саттера или в книге по С++11.

Вкратце: http://ru.wikipedia.org/wiki/C... 0.B8.D1.8F
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.09.2012, 21:27
Помогаю со студенческими работами здесь

Как правильно объявить функцию WINAPI
Здравствуйте. Я пытаюсь объявить в коде на языке C# функцию WINAPI ExtractIcon следующим...

Забыл, как объявить функцию с тем же названием?
Забыл, как объявить ещё одну функцию с тем же названием?

Можно ли объявить дружественную функцию как шаблон?
Так всё работает: template&lt;class T&gt; class random { /*всячина*/ public: friend void...

Как объявить созданную функцию, чтобы ей пользоваться?
Создал свою функцию, записал в хедере void __fastcall TForm1::test(TObject *Sender) {} прописал...

Как объявить функцию main в данном куске кода?
как объявить функцию main в данном куске кода? int len; char* str = &quot;gpDWtrjHs5Oa2YSFiaTeoQ==&quot;;...

Как объявить массивы, заполнить и передать в эту функцию
#include &lt;iostream&gt; #include &lt;unordered_set&gt; bool foo(int* arr1, size_t size1, int* arr2,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru