Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов функций без аргументов 
:(
    Опции темы
tofreesky
Дата 11.6.2010, 23:08 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

Репутация: нет
Всего: нет



Допустим имеется функция

void test(DWORD Size)
{

}

Как сделать так что бы, аргумент Size был не обязательным?

Т.е. что бы компилятор понимал если функция вызывается как

test(); то Size = 0;

а если test(10); то Size = 10;

Это я к тому что бы нули в скобках не ставить там где не надо
PM MAIL   Вверх
UniBomb
Дата 11.6.2010, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Код

void test(DWORD Size=0)
{
//
}

PM MAIL ICQ Skype   Вверх
tofreesky
Дата 11.6.2010, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

Репутация: нет
Всего: нет



А в Delphi как?
PM MAIL   Вверх
UniBomb
Дата 11.6.2010, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 97



tofreesky, да ты совсем обнаглел  smile  Тут же всё прекрасно расписано про это!!
PM MAIL ICQ Skype   Вверх
tofreesky
Дата 11.6.2010, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

Репутация: нет
Всего: нет



Код

#include <stdio.h>

int test(int x = 0)
{
 if(x == 0)
 {
  printf("x == 0\n");
  getchar();
 }
 return 0;
}

int main()
{
 test(5);
 printf("Hello world\n");
 return 0;
}


test.c:3: error: syntax error before '=' token
test.c: In function `test':
test.c:5: error: `x' undeclared (first use in this function)
test.c:5: error: (Each undeclared identifier is reported only once
test.c:5: error: for each function it appears in.)

PM MAIL   Вверх
UniBomb
Дата 11.6.2010, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 97



tofreesky, а вот теперь ответь мне - на каком языке ты написал свою программу?
PM MAIL ICQ Skype   Вверх
tofreesky
Дата 11.6.2010, 23:36 (ссылка)   | (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

Репутация: нет
Всего: нет



Си... Как тяжело получить ответ на простой вопрос

Это сообщение отредактировал(а) tofreesky - 11.6.2010, 23:42
PM MAIL   Вверх
UniBomb
Дата 11.6.2010, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 97



tofreesky, ну так с этого и надо было начинать. В языке Си это действительно немного иначе выглядит. В частности вот тут об этом написано:

Цитата

Программист может разрабатывать свои функции с переменным числом параметров. Для обеспечения удобного способа доступа к аргументам функции с переменным числом параметров имеются три макроопределения (макросы) va_start, va_arg, va_end, находящиеся в заголовочном файле stdarg.h. Эти макросы указывают на то, что функция, разработанная пользователем, имеет некоторое число обязательных аргументов, за которыми следует переменное число необязательных аргументов. Обязательные аргументы доступны через свои имена как при вызове обычной функции. Для извлечения необязательных аргументов используются макросы va_start, va_arg, va_end в следующем порядке.



Цитата(tofreesky @  12.6.2010,  00:36 Найти цитируемый пост)
Как тяжело получить ответ на простой вопрос

Но ведь это всё же легче, чем самому найти ответ, правда ведь?
PM MAIL ICQ Skype   Вверх
alexcustov
Дата 12.6.2010, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 11.6.2010
Где: Полацкае княства

Репутация: нет
Всего: нет



В Си нет параметров по-умолчанию. В С++ - есть.
PM MAIL   Вверх
UniBomb
Дата 12.6.2010, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Цитата(UniBomb @  12.6.2010,  00:50 Найти цитируемый пост)
об этом написано:

И да, что я имел в виду - смотришь количество переданных параметров, если параметров нет, то внутренней переменной присваиваешь ноль. В противном случае считываешь значение переданного параметра
PM MAIL ICQ Skype   Вверх
xvr
Дата 12.6.2010, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(UniBomb @  12.6.2010,  01:22 Найти цитируемый пост)
И да, что я имел в виду - смотришь количество переданных параметров, если параметров нет, то внутренней переменной присваиваешь ноль.
Увы, в С невозможно узнать, сколько параметров передали (да и в С++ тоже)  smile 


PM MAIL   Вверх
Abyx
Дата 12.6.2010, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



это делается через перегрузку.
Код

void foo(int x)
{
....
}
void foo() {foo(0);}

PM MAIL   Вверх
azesmcar
Дата 12.6.2010, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Abyx @  12.6.2010,  20:33 Найти цитируемый пост)
это делается через перегрузку.

в Си нет перегрузки функций.
PM   Вверх
xvr
Дата 12.6.2010, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(Abyx @  12.6.2010,  20:33 Найти цитируемый пост)
это делается через перегрузку.

Закон Мэрфи:
Цитата

Как бы четко вы не объяснили что то, всегда найдется человек, который вас поймет не правильно


Цитата(xvr @  12.6.2010,  19:18 Найти цитируемый пост)
Увы, в С невозможно узнать, сколько параметров передали (да и в С++ тоже)

Здесь речь идет о количестве параметров, переданных через конструкцию 'эллипс' (3 точки в параметрах)
Код

void func(...)
{
}


PM MAIL   Вверх
djamshud
Дата 12.6.2010, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



Код

void foo(int amount,...);


Сначала передаете количество передаваемых параметров, потом - сам параметры. А вообще почему бы вам с такими запросами не писать на с++ вместо того, чтобы городить косытли вокруг си?


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0611 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.