Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2014, 23:05   #1
lapevgen
Новичок
Джуниор
 
Регистрация: 28.11.2014
Сообщений: 2
По умолчанию Почему в CodeBlocks возникает предупреждение, а не ошибка компиляции

Почему при компиляции следующего кода в среде CodeBlocks (проект на С, не на С++) возникает
worning: inplicit declaration of function 'pow' в 9 строке
Код:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a,b=0,c=0;
    scanf("%d",&a);
    while (a>0) {
        c=c+(a%10)*pow(2,b);
        a=a/10;
        b=b+1;
    }
    printf("%d",c);
    return 0;
}
Я понимаю, что нет #include<math.h>. Но должна возникать ошибка компиляции, а не предупреждение. Но в данном случае программа почему-то работает, причем правильно. Почему?

Последний раз редактировалось Stilet; 30.11.2014 в 11:52.
lapevgen вне форума Ответить с цитированием
Старый 29.11.2014, 00:39   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Нужно было в гугл скопировать: warning: implicit declaration of function 'pow'

Судя по ссылке why exactly do we get this warning? современная версия GCC имеет встроенные определения некоторых стандартных функции. А если нет соответствия, то выводится это сообщение. Нет функции pow, которая принимает в качестве первого параметра целое число, но всё равно компилятор перевёл из int в double. pow оказалась среди встроенных, поэтому работает без math Нужно было так написать: pow(7.0, 3.0) - это если для double, а для float так pow(7.0f, 3.0f) Для того, чтобы избежать этого предупреждения нужно написать явно: #include <math.h> и типы констант явно указывайте. Следите, чтобы не было неявных приведений типов

Последний раз редактировалось 8Observer8; 29.11.2014 в 00:48.
8Observer8 вне форума Ответить с цитированием
Старый 29.11.2014, 08:08   #3
lapevgen
Новичок
Джуниор
 
Регистрация: 28.11.2014
Сообщений: 2
По умолчанию

Спасибо большое! Понятно.
lapevgen вне форума Ответить с цитированием
Старый 30.11.2014, 12:16   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
а для float так pow(7.0f, 3.0f)
Для float - powf. Или include tgmath.h.
Somebody вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему возникает ошибка при построении? с++ cemaru Visual C++ 1 13.04.2014 22:36
Почему возникает ошибка? - BEGIN expected but END found Женя32 Общие вопросы Delphi 4 01.12.2013 18:20
Почему мне не сделали предупреждение или бан? Tronix О форуме и сайтах клуба 16 28.03.2011 22:33
Почему возникает ошибка? Aleksey1989 Помощь студентам 1 05.10.2010 18:16
Возникает ошибка..... MyXa Общие вопросы .NET 12 31.08.2010 14:29