Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.90/10: Рейтинг темы: голосов - 10, средняя оценка - 4.90
bgm313
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
1

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

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

Во всех учебниках пишут, что каждая функция должна иметь прототип. ВОт стало интересно, можно ли объявить функцию, которая не имеет прототип. Если да, то как? Покажите.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2012, 20:15
Ответы с готовыми решениями:

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

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

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

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

как мне в функции main() объявить функцию Do (), подскажите пожалуйста, на таком глупом застрял
#include <iostream> #include <string> #include <conio.h> #include <clocale>...

24
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 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()
{
   ....
}
0
bgm313
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 20:37  [ТС] 3
Во 2 случае прототип функции одновременно является его определением. А надо совсем без прототипа.
0
ValeryS
Модератор
7262 / 5516 / 692
Регистрация: 14.02.2011
Сообщений: 18,672
01.09.2012, 20:39 4
Цитата Сообщение от bgm313 Посмотреть сообщение
А надо совсем без прототипа.
кому надо?
и зачем?
1
PSIAlt
87 / 87 / 1
Регистрация: 19.06.2012
Сообщений: 245
01.09.2012, 20:41 5
Цитата Сообщение от bgm313 Посмотреть сообщение
Во 2 случае прототип функции одновременно является его определением. А надо совсем без прототипа.
Полагаю в строго типизированном языке у тебя так не получится
0
ValeryS
Модератор
7262 / 5516 / 692
Регистрация: 14.02.2011
Сообщений: 18,672
01.09.2012, 20:46 6
Цитата Сообщение от bgm313 Посмотреть сообщение
ВОт стало интересно, можно ли объявить функцию, которая не имеет прототип. Если да, то как?
элементарно
не вызывать её
2
OhMyGodSoLong
~ Эврика! ~
1246 / 995 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 20:48 7
C++ ещё не настолько монструозный крутой, чтобы выводить и типы функций.
0
bgm313
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 20:57  [ТС] 8
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
C++ ещё не настолько монструозный крутой, чтобы выводить и типы функций.
Что вы имеете в виду?
0
MrCold
861 / 759 / 174
Регистрация: 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
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
01.09.2012, 21:05 10
bgm313, Это на кой фиг такое нужно? Ответ : НЕТ.
0
OhMyGodSoLong
~ Эврика! ~
1246 / 995 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 21:12 11
Лучший ответ Сообщение было отмечено как решение

Решение

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

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

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

Это слишком широкий вопрос.
3
bgm313
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 21:14  [ТС] 12
Цитата Сообщение от MrCold Посмотреть сообщение
Мож #define подойдет ?
Может быть для define функции, тоже где-то прототип неявно объявляется?
0
Герц
525 / 342 / 12
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
01.09.2012, 21:15 13
Может быть для define функции, тоже где-то прототип неявно объявляется?
#define определяет макрос, ничего общего с функциями у него нет. Это реализовано на уровне препроцессора, а не языка C++.
0
PSIAlt
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
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
01.09.2012, 21:20 15
bgm313, для тебя сначала стоит уяснить что такое прототип.
Прототип - это описание функции без её тела.
В примере от Dani это четко показано.
0
OhMyGodSoLong
~ Эврика! ~
1246 / 995 / 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
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 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
0
bgm313
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 21:25  [ТС] 18
auto func = [](int x) -> int { return x+5; };

Если можно пояснить что это за конструкция или сказать что почитать?
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.09.2012, 21:27 19
Цитата Сообщение от bgm313 Посмотреть сообщение
можно ли объявить функцию, которая не имеет прототип
Прототип и есть объявление. Можно ли объявить не объявляя?
0
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
01.09.2012, 21:27 20
bgm313, Лямбда функция. С++11. Почитать в стандарте С++11 или у Саттера или в книге по С++11.

Вкратце: http://ru.wikipedia.org/wiki/C%2B%2B...BD.D0.B8.D1.8F
0
01.09.2012, 21:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2012, 21:27

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

Объявить функцию в STRUCT {} С++
Доброй ночи Создаю меню в консоле Задумка такая - для каждого пункта меню...

Объявить массив? Запросто! Объявить массив массивов? А как это?
Доброго времени суток! Конечно, все знают, как объявить массив! int main...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru