Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Базовые вопросы.


Автор: Opik 31.8.2005, 18:14
Я конечно понимаю, но я только первые 5 минут учу C++ ^)) так тчо камнями не кидайте..
почему после Hello world идет <null> ?
второй вопрос как соединять строки например: printf("bla bla bla"+var+"bla bla bla"); или же просто printf("dawdaw %s dadw ", var); ?
и третий вопрос - double func(int x, int n); т.е объявление функции, или что это такое? почему это обязательно делать?
Код

#include <stdio.h>

double func(int x, int n);

int main()
{
     double c = func(1, 2);
     printf("Hello ! %s\n", c);
     return 0;
}

double func(int a, int b)
{
   return a + b;
}

Автор: Mal Hack 31.8.2005, 18:30
Цитата(Opik @ 31.8.2005, 19:14)
почему после Hello world идет <null> ?

Выводишь число, как строку, это тебе не PHP. Попробуй %d

Цитата(Opik @ 31.8.2005, 19:14)
второй вопрос как соединять строки например: printf("bla bla bla"+var+"bla bla bla"); или же просто printf("dawdaw %s dadw ", var);

printf( "andkjh %s sjhfsk %f" , var1 , var2 );


Цитата(Opik @ 31.8.2005, 19:14)
и третий вопрос - double func(int x, int n); т.е объявление функции, или что это такое? почему это обязательно делать?

Прототип функции. Этим ты показываешь что функция есть.

Автор: Opik 31.8.2005, 18:31
Цитата
Прототип функции. Этим ты показываешь что функция есть.

дык, а сама функция толком ничего не значит?

Автор: maxim1000 31.8.2005, 18:35
Цитата
почему после Hello world идет <null>

чтобы знать, где заканчивается строка...

Автор: Mal Hack 31.8.2005, 18:35
Цитата(Opik @ 31.8.2005, 19:31)
дык, а сама функция толком ничего не значит?

Тело функции это код, а прототипом ты показываешь не только что у тебЯ она есть, но и какие типы данных у значений, которые ту будешь в функцию передавать и какое значение (какого типа точнее) будет возвращать функция.

Автор: maxim1000 31.8.2005, 18:37
Цитата
дык, а сама функция толком ничего не значит?

а сама функция может быть определена в другом файле или где-нибудь внизу в этом файле, куда компилятор еще не дошел, вот он и не знает, есть ли такая функция или это - просто опечатка

Автор: Opik 31.8.2005, 18:40
Код

double func(int x, int n);

double func(int a, int b)
{
   return a + b;
}

получается я 2 раза объявляю типы, может быть достаточно 1 раз? при объявлении функции?

Автор: Дрон 31.8.2005, 18:50
Цитата(Opik @ 31.8.2005, 19:40)
получается я 2 раза объявляю типы, может быть достаточно 1 раз? при объявлении функции?

Насчёт Си не знаю, но в С++ точно нет.
Дело в том, что в С++ могут быть функции с одним и тем же именем, но различающиеся типом параметров.

Автор: Mayk 31.8.2005, 19:09
Цитата

Насчёт Си не знаю, но в С++ точно нет.
Дело в том, что в С++ могут быть функции с одним и тем же именем, но различающиеся типом параметров.

В си всё обстоит гораздо страшнее. Компилятор думает(шибко умный), что если ф-ция не определена, то она
1) существует (пусть так)
2) принимает те значения, которые ей передают(эт прально),
3)возвращает int(??? с чего???). Что может не соответствовать действительности.
На форуме уже как-то поднимался вопрос, почему, допустим
Код

/*инклюдов нет*/
int main()
{
    printf("%f\n",floor(2.4));
    return 0;
}

Выдает 0.00000. А выдает потому, что компилятор считает в данном случае, что возвращается int, а не double.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)