1

Тема: Допоможіть знайти помилку

#include <stdio.h>
#include <math.h>
#include "stdafx.h"
#define M_PI 3.141591
int main()
{
    float a,b,x,w;
    printf("a=");
    scanf_s("%f",&a);
    printf("b=");
    scanf_s("%f",&b);
    printf("x=");
    scanf_s("%f",&x); 
    w=log10(fabs(a))+(atan(x*x))*M_PI*a*(powl(b,1.0/3))-cos(a/b)/sqrt(fabs(a+x));
    printf("Result=%8.5f",w); 
    return 0;
}

Warning  1    warning C4627: '#include <math.h>': skipped when looking for precompiled header use   
Error    2    error C3861: 'log10': identifier not found    1.cpp    17
Error    3    error C3861: 'fabs': identifier not found     1.cpp    17
Error    4    error C3861: 'atan': identifier not found     1.cpp    17
Error    5    error C3861: 'powl': identifier not found     1.cpp    17
Error    6    error C3861: 'cos': identifier not found   
Error    7    error C3861: 'sqrt': identifier not found     1.cpp    17
Error    8    error C3861: 'fabs': identifier not found     1.cpp    17

2 Востаннє редагувалося leofun01 (01.10.2019 20:29:00)

Re: Допоможіть знайти помилку

grinyuk309 написав:

Допоможіть знайти помилку

Знайшов. Помилки в цьому рядку :

    w=log10(fabs(a))+(atan(x*x))*M_PI*a*(powl(b,1.0/3))-cos(a/b)/sqrt(fabs(a+x));

А повідомлення про ці помилки тут :
Error    2    error C3861: 'log10': identifier not found    1.cpp    17
Error    3    error C3861: 'fabs': identifier not found     1.cpp    17
Error    4    error C3861: 'atan': identifier not found     1.cpp    17
Error    5    error C3861: 'powl': identifier not found     1.cpp    17
...

А вирішувати проблеми треба по порядку :
Warning  1    warning C4627: '#include <math.h>': skipped when looking for precompiled header use

upd: Останнє перекладається як :
попередження C4627: '#include <math.h>': пропущено при пошуку прекомпільованого заголовка.
Тому ідентифікатори математичних функцій не знайдені.

Проблема в тому, що ви включаєте "stdafx.h" і не використовуєте його.
Перенесіть рядки

#include <stdio.h>
#include <math.h>

у файл stdafx.h і програма зкомпілюється.

Подякували: grinyuk3091

3 Востаннє редагувалося wander (01.10.2019 23:10:51)

Re: Допоможіть знайти помилку

leofun01 написав:

Проблема в тому, що ви включаєте "stdafx.h" і не використовуєте його.

Краще їх не використовувати й просто прибрати,
бо у якийсь момент ТСа можуть спитати за це,
а він не зможе відповісти :)

We don't want to make an extra work.

Подякували: leofun01, grinyuk3092

4

Re: Допоможіть знайти помилку

Короткий лікнеп. Мова C розроблялася в часи, коли 128КБ оперативної пам'яті були мрією. Відповідно, вона має певні особливості, які зберігаються досі (і перейшли в навіть до C++). Зокрема, підключення бібліотек робиться безпосереднім внесенням вмісту заголовкового файлу до файлу програми. Коли файлів у проєкті багато, це може зробити компіляцію дуже довгою, бо кожен заголовковий файл треба включити до кожного файлів з кодом. Сучасні компілятори намагаються обійти цю проблему, зокрема, за допомогою передкомпільованих заголовків - групи заголовків, що компілюються один раз, а результат потім використовується всюди. У Visual C++ ця ідея реалізована у вигляді файлу із такими заголовками, що зветься stdafx.h і додається першим у кожен файл проєкту.  Тому - або зробіть

#include "stdafx.h"

першим рядком у файлі, або вимкніть передкомпільовані заголовки, у вашому випадку вони не сильно допоможуть.

Подякували: leofun01, Arete, grinyuk3093

5

Re: Допоможіть знайти помилку

koala написав:

stdafx.h

До речі у VS2019 його перейменували, тепер це називається, вроді, як pch.h

Подякували: leofun01, koala2

6

Re: Допоможіть знайти помилку

Цікаво, що взагалі stdafx означає? PCH - це і є PreCompiled Headers.

Подякували: Arete1

7 Востаннє редагувалося wander (02.10.2019 11:47:51)

Re: Допоможіть знайти помилку

koala написав:

PCH - це і є PreCompiled Headers.

Маю признатись, що перейменування напрошувалося )
Зараз більш зрозуміло, що це таке, бо раніше цей заголовок
можна було легко сплутати з якимсь із С, наприклад, через
префікс std, stdint, stdio, etc.

koala написав:

Цікаво, що взагалі stdafx означає?

Теж би почитав, як розшифровується stdafx.
І чому так був названий.
Наразі на msdn нічого не вдалося знайти :D
https://docs.microsoft.com/uk-ua/cpp/bu … ew=vs-2017

Подякували: leofun011

8

Re: Допоможіть знайти помилку

The afx in stdafx.h stands for application framework extensions. AFX was the original abbreviation for the Microsoft Foundation Classes (MFC).

Подякували: wander, leofun012

9

Re: Допоможіть знайти помилку

Всім дякую за допомогу!!! Я ще початківець)