Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84

Поменять стандарт ISO C99 на ISO C90

23.05.2015, 21:40. Показов 3331. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На домашнем компьютере (mac) компилирую программы в терминале через gcc, стандарт языка там ISO C99, однако в универе на компах ISO C90, поэтому многие программы, работающие дома, не работают в универе, причем ошибки могут быть как несущественные (не пропускает int i = 0 как и серьезные (например исключение в операции с плавающей точкой). Вопрос: как поменять на своем компе стандарт на 90-й? хочется отлаживать программы дома. В гугле никакой информации почти не нашел, только на иностранных сайтах кто-то говорил после gcc писать -std=c90, но это не помогло. буду признателен за помощь.

P.S. мб можно как-то в xcode поменять стандарт и там кодить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.05.2015, 21:40
Ответы с готовыми решениями:

Помогите устранить ошибку: "Name lookup of 'i' changed for ISO 'for"
При компиляции выдает ошибку. In function 'int main()': name lookup of 'i' changed for ISO 'for' scoping (if you use...

uint32_t this decimal constant is unsigned only in ISO C90
Пишу так: uint32_t i=2147483648; Компилятор выдает: this decimal constant is unsigned only in ISO C90 И работает как со знаковой...

ISO C++ forbids. error
#ifndef CPYRAMID_H #define CPYRAMID_H class cPoint3d { public: cPoint3d() : x_(0.0),y_(0.0),z_(0.0) {}; ...

18
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.05.2015, 03:28
Цитата Сообщение от ZimOne Посмотреть сообщение
писать -std=c90, но это не помогло
То, что не помогло - не особо верится, если честно. Что-то не так сделал - вероятнее.
Можно еще ключик -ansi попробовать.
Вообще, документация вот: https://gcc.gnu.org/onlinedocs... tions.html
Пробуй.
1
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84
24.05.2015, 12:43  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
То, что не помогло - не особо верится,
Когда использую -ansi пишет clang: warning: argument unused during compilation: '-ansi=c90'

Когда использую -std=c90 или -std=c89, компилирует нормально, хотя должен ругаться на int i = 0; и тд

Добавлено через 9 минут
А, нужно просто -ansi. Но так тоже все компилируется

Добавлено через 3 минуты
вместо gcc попробовал gnu - нет результата

Добавлено через 1 минуту
Может это проблема конкретно Мака?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.05.2015, 13:02
Цитата Сообщение от ZimOne Посмотреть сообщение
Может это проблема конкретно Мака?
Bash
1
gcc -v
что выдает?

Добавлено через 1 минуту
Цитата Сообщение от ZimOne Посмотреть сообщение
хотя должен ругаться на int i = 0;
Попробуй так:
Ставь -std=c89 и еще ключ -pedantic
1
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84
24.05.2015, 13:10  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
что выдает?
Выдает Last login: Sun May 24 12:42:48 on ttys000
Mini-Aleksej:~ aleksejkockarev$ gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1
Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.3.0
Thread model: posix
Mini-Aleksej:~ aleksejkockarev$

Добавлено через 4 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Попробуй так:
Ставь -std=c89 и еще ключ -pedantic
Попробовал - он начал ругаться на комменты в стиле cpp, и на mixes code and declaration, все правильно, но программа все равно скомпилировалась, через ./a.out запускаю, она работает правильно, хотя на компе в универе после ввода исходных данных она падает и выдает Исключение в операции с плавающей точкой
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.05.2015, 13:12
Цитата Сообщение от ZimOne Посмотреть сообщение
хотя на компе в универе после ввода исходных данных она падает и выдает Исключение в операции с плавающей точкой
Тут уже не стандарт виноват. Показывай код.

Добавлено через 1 минуту
Цитата Сообщение от ZimOne Посмотреть сообщение
но программа все равно скомпилировалась
Если warning`ов недостаточно, то поменяй ключ -pedantic на -pedantic-errors
1
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84
24.05.2015, 13:19  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Показывай код.
main4-1.c
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <stdlib.h>
#define _USE_MATH_DEFINES
#include <math.h>
#include "int4-1.h"
 
#define eps 1e-6
#define d 1e-4
 
 
int main(void)
{
    double x;
    fprintf(stdout, "Type alpha: ");
    if (fscanf(stdin, "%lf", &alpha) != 1) { fprintf(stdout, "er"); return -1; }
    if ((alpha >= 1) || (alpha <= 0))
    {
        fprintf(stdout, "No solution if alpha is out of (0,1)\n");
        return -1;
    }
    fprintf(stdout, "Type N: ");
    if (fscanf(stdin, "%d", &n) != 1) { return -1; fprintf(stdout, "er"); } 
    x = root_search(f, g, -100, 100, d2f);
    fprintf(stdout, "Solution: x = %lf f(x) = %lf\n", x, f(g,x));
    return 0;
}
int4-1.c
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <stdio.h>
#include <stdlib.h>
#define _USE_MATH_DEFINES
#include <math.h>
#include "int4-1.h"
 
#define eps 1e-6
#define d 1e-4
 
 
double g(double t)
// Кочкарев А.В.
// Подыинтегральная функция.
// Вход: аргумент t
// Выход: значение подинтегральной функции при данном аргументе
{
  return exp(-0.5*t*t);
}
 
 
double f(double(*g)(double t), double x)
// Кочкарев А.В.
// Функция, зависящая от x и alpha.
// Вход: аргумент x и подинтегральная функция g
// Выход: значение функции при данном x и alpha
{
  return integral(g,eps,x)-alpha*sqrt(2*M_PI)+sqrt(0.5*M_PI);
}
 
 
double integral(double (*f)(double), double a, double b)
// Кочкарев А.В.
// Функция подсчета приближенного значения интеграла на данном отрезке методом трапеций
// Вход: функция f, которую интегрируем, концы отрезка a и b
// Выход: приближенное значение интеграла на данном отрезке
{
    double h,l,s,s1,m;
    int i;
    s=0;
    h=(b-a)/n; printf("%lf",h);
    l=fabs(b-a);
    m=l/n;
    for (i=1;i<n;i++)
      s=s+f(a+i*m);
    s1=((f(a)+f(b))/2.);
    s=s+s1;
    s=s*h;
    fprintf(stdout, "%lf", s);
    return s;
}
 
 
double d2f(double t)
// Кочкарев А.В.
// Второй дифференциал подинтегральной функции
// Вход: аргумент t
// Выход: значение второго дифференциала при данном аргументе
{
    return -exp(-0.5*t*t)*t;
}
 
 
double root_search(double(*f)(double(*g)(double t),double x), double(*g)(double t), double a, double b, double (*d2f)(double x))
// Кочкарев А.В.
// Функция нахождения корня уравнения на заданно отрезке методом Ньютона (касательных)
// Вход: Функция f, корень которой ищем, ее производная g, концы отрезка a и b, ее вторая производная d2f
// Выход: корень уравнения f на данном отрезке
{
    double x0, xn;
    int kol;
    kol = 1;
    if (fabs(f(g,a)) < eps)
        return a;
    if (fabs(f(g,b)) < eps)
        return b;
    if (f(g,a)*d2f(a)>0)
        x0 = a;
    else
        x0 = b;
    xn = x0-f(g,x0)/g(x0);
    if((xn < a) || (xn > b))
        xn = (a + b)/2;
    if(fabs(f(g,xn)) < eps)
        return xn;
    while(fabs(x0-xn) > eps)
    {
        if(kol > 100)
            return -1;
        x0 = xn;
        xn = x0-f(g,x0)/g(x0);
        if((xn < a) || (xn > b))
            xn = (a + b)/2;
        if(fabs(f(g,xn)) < eps)
            return xn;
    fprintf(stdout, "%d\n", kol);
        ++kol;
    }
    return xn;
}
int4-1.h

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
double g(double t);
// Кочкарев А.В.
// Подыинтегральная функция.
// Вход: аргумент t
// Выход: значение подинтегральной функции при данном аргументе
 
double f(double(*g)(double t), double x);
// Кочкарев А.В.
// Функция, зависящая от x и alpha.
// Вход: аргумент x и подинтегральная функция g
// Выход: значение функции при данном x и alpha
 
 
double integral(double (*f)(double), double a, double b);
// Кочкарев А.В.
// Функция подсчета приближенного значения интеграла на данном отрезке методом трапеций
// Вход: функция f, которую интегрируем, концы отрезка a и b
// Выход: приближенное значение интеграла на данном отрезке
 
double d2f(double t);
// Кочкарев А.В.
// Второй дифференциал подинтегральной функции
// Вход: аргумент t
// Выход: значение второго дифференциала при данном аргументе
 
double root_search(double(*f)(double(*g)(double t),double x), double(*g)(double t), double a, double b, double (*d2f)(double x));
// Кочкарев А.В.
// Функция нахождения корня уравнения на заданно отрезке методом Ньютона (касательных)
// Вход: Функция f, корень которой ищем, ее производная g, концы отрезка a и b, ее вторая производная d2f
// Выход: корень уравнения f на данном отрезке
 
int n;
// Кочкарев А.В.
// Глобальная переменная n - количество трапеций при подсчете интеграла
 
double alpha;
// Кочкарев А.В.
// Глобальная переменная alpha - параметр уравнения
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84
24.05.2015, 13:21  [ТС]
Программа считает такой интеграл: Название: Снимок экрана 2015-05-24 в 13.20.28.png
Просмотров: 43

Размер: 6.6 Кб
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84
24.05.2015, 13:26  [ТС]
Суть заключается в том что основное что мы используем - это интегрирование методом трапеций и нахождения корня методом Ньютона - касательных

Добавлено через 4 минуты
По идее ведь исключение в операции с плавающей точкой возникает из-за деления на ноль, и странно что мак это пропускает
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.05.2015, 13:26
ZimOne, входные данные, на которых проявляется проблема в универе?
1
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84
24.05.2015, 13:29  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
входные данные
Абсолютно любые, но надо заметить что альфа должна быть в интервале (!) от 0 до 1, количество трапеций тоже можно любое ввести, программа падает всегда
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.05.2015, 13:45
Цитата Сообщение от ZimOne Посмотреть сообщение
Абсолютно любые, но надо заметить что альфа должна быть в интервале (!) от 0 до 1, количество трапеций тоже можно любое ввести, программа падает всегда
Это я уже сам понял.
У меня проблема тоже не воспроизводится.
Еще вопрос - какой компилятор стоит в универе?
По поводу причин ошибки пока сложно сказать наверняка (вероятно ошибка точности в плавающей точке и чуть разная реализация на разных компиляторах играет роль). Надо внимательно изучить код.
Из того, что сразу бросилось в глаза: глобальные переменные в h-файле. Надо переделать так:
В int4-1.h:
C
1
2
3
4
5
extern int n;
// Глобальная переменная n - количество трапеций при подсчете интеграла
 
extern double alpha;
// Глобальная переменная alpha - параметр уравнения
В int4-1.c (после include):
C
1
2
int n;
double alpha;
1
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84
24.05.2015, 14:11  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Еще вопрос - какой компилятор стоит в универе?
ОС - fedora, компилятор gcc

Добавлено через 47 секунд
Цитата Сообщение от DrOffset Посмотреть сообщение
Надо переделать так
Нужно добавить туда и туда? или достаточно один вариант использовать?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.05.2015, 14:22
Цитата Сообщение от ZimOne Посмотреть сообщение
Нужно добавить туда и туда? или достаточно один вариант использовать?
Это и есть один вариант. Исправление касается двух файлов. В h-нике добавляешь exetrn. В с-шнике - сами переменные.
1
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84
24.05.2015, 14:25  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Это и есть один вариант.
Спасибо, исправил
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.05.2015, 14:26
Цитата Сообщение от ZimOne Посмотреть сообщение
ОС - fedora, компилятор gcc
Если скажешь побольше инфы (вывод uname -a и gcc -v) о машине в универе, то будет совсем замечательно.
1
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84
24.05.2015, 14:28  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Если скажешь побольше инфы
Сейчас к сожалению не могу проверить - универ закрыт
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.05.2015, 14:30
Цитата Сообщение от ZimOne Посмотреть сообщение
Сейчас к сожалению не могу проверить - универ закрыт
Понимаю. Я могу проверить на любой версии, но так как времени проверять на всех у меня нет, то просто напиши инфу, как узнаешь. Посмотрю.
1
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84
24.05.2015, 14:32  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Посмотрю.
хорошо, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2015, 14:32
Помогаю со студенческими работами здесь

ISO C++ forbids declaration of 'c' with no type
Компилятор выдает ошибку при выполнении данного кода, в чем ошибка? #include &lt;iostream&gt; using namespace std; template...

15: name lookup of `j' changed for new ISO `for' scoping
как исправит ошибку ? #include &lt;iostream&gt; using namespace std; int main() { int age; //array 'age'...

ISO C++ forbids declaration of with no type
Здравстуйте! Недавно начал изучать С++. В коде возникла ошибка: Line 23| ISO C++ forbids declaration of 'roman' with no type. Подскажите,...

Монтирование файла образа .iso C++
Всем доброго времени суток! Подскажите как смонтировать файл образа .iso средствами C++ ? Читаю документацию по IMAPI, но не совсем...

14 ISO C++ forbids comparison between pointer and integer
как исправит эту ошибку ? #include &lt;iostream&gt; using namespace std; int main() { const int MAX = 80; char str ; do { ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru