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

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

23.05.2015, 21:40. Показов 3279. Ответов 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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
24.05.2015, 13:26
ZimOne, входные данные, на которых проявляется проблема в универе?
1
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84
24.05.2015, 13:29  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
входные данные
Абсолютно любые, но надо заметить что альфа должна быть в интервале (!) от 0 до 1, количество трапеций тоже можно любое ввести, программа падает всегда
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
24.05.2015, 14:22
Цитата Сообщение от ZimOne Посмотреть сообщение
Нужно добавить туда и туда? или достаточно один вариант использовать?
Это и есть один вариант. Исправление касается двух файлов. В h-нике добавляешь exetrn. В с-шнике - сами переменные.
1
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84
24.05.2015, 14:25  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Это и есть один вариант.
Спасибо, исправил
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru