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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
#1

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

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

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

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

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

Можно ли объявить дружественную функцию как шаблон? - C++
Так всё работает: template<class T> class random { /*всячина*/ public: friend void function(random<int>&); ...

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 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 / 2
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 20:37  [ТС] #3
Во 2 случае прототип функции одновременно является его определением. А надо совсем без прототипа.
0
ValeryS
Модератор
6633 / 5040 / 466
Регистрация: 14.02.2011
Сообщений: 16,850
01.09.2012, 20:39 #4
Цитата Сообщение от bgm313 Посмотреть сообщение
А надо совсем без прототипа.
кому надо?
и зачем?
1
PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
01.09.2012, 20:41 #5
Цитата Сообщение от bgm313 Посмотреть сообщение
Во 2 случае прототип функции одновременно является его определением. А надо совсем без прототипа.
Полагаю в строго типизированном языке у тебя так не получится
0
ValeryS
Модератор
6633 / 5040 / 466
Регистрация: 14.02.2011
Сообщений: 16,850
01.09.2012, 20:46 #6
Цитата Сообщение от bgm313 Посмотреть сообщение
ВОт стало интересно, можно ли объявить функцию, которая не имеет прототип. Если да, то как?
элементарно
не вызывать её
2
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 20:48 #7
C++ ещё не настолько монструозный крутой, чтобы выводить и типы функций.
0
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 20:57  [ТС] #8
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
C++ ещё не настолько монструозный крутой, чтобы выводить и типы функций.
Что вы имеете в виду?
0
MrCold
855 / 753 / 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 );
 
}
1
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 3
01.09.2012, 21:05 #10
bgm313, Это на кой фиг такое нужно? Ответ : НЕТ.
0
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.09.2012, 21:12 #11
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от bgm313 Посмотреть сообщение
Что вы имеете в виду?
Я имею в виду, что если C++11 ещё умеет (более-менее) автоматически выводить типы переменных при компиляции (auto), то точно так же выводить типы функции для него ещё слишком круто.

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

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

Это слишком широкий вопрос.
3
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
01.09.2012, 21:14  [ТС] #12
Цитата Сообщение от MrCold Посмотреть сообщение
Мож #define подойдет ?
Может быть для define функции, тоже где-то прототип неявно объявляется?
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
01.09.2012, 21:15 #13
Может быть для define функции, тоже где-то прототип неявно объявляется?
#define определяет макрос, ничего общего с функциями у него нет. Это реализовано на уровне препроцессора, а не языка C++.
0
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;
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
01.09.2012, 21:20 #15
bgm313, для тебя сначала стоит уяснить что такое прототип.
Прототип - это описание функции без её тела.
В примере от Dani это четко показано.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2012, 21:20
Привет! Вот еще темы с ответами:

Объявить массив? Запросто! Объявить массив массивов? А как это? - C++
Доброго времени суток! Конечно, все знают, как объявить массив! int main () { int array; }

необходимо объявить массив указателей на функцию - C++
которая (например) ничё не принимает и возвращает, допустим, значение типа int. Спасибо, кто откликнется.

Можно ли объявить два указателя на одну функцию? - C++
есть функция Send(uint type, char*data); но иногда второй аргумент const char*. можно ли сделать так чтобы на одну функцию Send указывали...

Вычислить гипотенузы используя функцию, объявить прототип - C++
Описать функцию расчета длины гипотенузы треугольника, в которую передаются длины двух катетов. С помощью этой функции вычислить гипотенузы...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.09.2012, 21:20
Ответ Создать тему
Опции темы

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