С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385

Как вернуться к старому доброму Си

25.09.2010, 23:59. Показов 2501. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Лет 6 назад наваял я cgi-скрипт на чистом С, транслировал его под Unix
с помощью gcc (к серверу обращался как с удаленной консоли) все было
очень мило, 6 лет меня не трогали, я уж и думать забыл - кончился,
видать, проект.
Ан нет!
Звонит мне коллега, который к моему скрипту обращался, такие дела,
говорит. На сервере сменили не то железо, не то софт, и скрипт мой
полностью отказывается пахать.
Ладно, пытаемся заново оттранслировать, а там лезет такая тьма ошибок!
Например

warning: deprecated conversion from string constant to 'char*'

Это на конструкцию
Code
1
 char *A[] = { "XXX", "YYY", "ZZZ" };
Или

error: expected primary-expression before '||' token

Это на
Code
1
 if (a>b || b<c)
значит надо
Code
1
 if ((a>b) || (b<c))
?

И так далее.
Ощущение, что вместо старого доброго Си я попал в какой-то другой язык.
Но у gcc прорва флагов. Может кто знает, нельзя ли такие флажки поставить
чтоб вернуться к старому Си K&R ?

А под конец такие слова
/usr/bin/ld: warning: i386 architecture of input file `ZU.o' is
incompatible with i386:x86-64 output
(м.б.от них станет понятно, что делать-то)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.09.2010, 23:59
Ответы с готовыми решениями:

Помогите Доброму Человеку с програмкой
Есть ли среди вас хоть один человек который может написать простейшую программу под винды (сам то я тока и знаю что веб программирование...

Как отключить редирект на пост по старому урлу?
Приветствую. Может кто сталкивался с таким явлением... Поменял я урл на пост. был site.com/url1 а стал site.com/url2, как бы страницы с...

Можно ли как-то к старому жёсткому диску подключить очень_старый БП ?
Привет. Есть старый ПК, у него перестал работать БП, и комп вообще не включается. Нашёл в коробке БП от очень_старого ПК )) и решил...

16
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
26.09.2010, 00:16
Day, а какие ключи используются, я сам именно с си сильно не знаком, но на подобный код он у меня warning'ов и errors не выдает


Цитата Сообщение от Day Посмотреть сообщение
/usr/bin/ld: warning: i386 architecture of input file `ZU.o' is
incompatible with i386:x86-64 output
а эта ZU.o перекомпилировалась на данной машине?
1
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
26.09.2010, 00:57  [ТС]
Цитата Сообщение от alex_x_x Посмотреть сообщение
Day, а какие ключи используются, я сам именно с си сильно не знаком, но на подобный код он у меня warning'ов и errors не выдает
Да 6 лет назад и у меня все было хорошо!
А ключ был и есть один - -funsigned_char (или что-то подобное) Это ерунда. Просто я привык к беззнаковым чарам.

а эта ZU.o перекомпилировалась на данной машине?
Конечно!

Тут все дело, видимо, в смене софта, и вот при этой смене совсем другие флаги даны gcc по умолчанию!

Добавлено через 6 минут
В любом случае спасибо за участие.
Знаете, когда пытаешься растолковать свою проблему даже не очень-то и понимающему ее человеку,
вдруг клюнет - сам поймешь.
Пока не клюнуло...

Добавлено через 20 минут
В общем-то ничего страшного. string к char * как-нибудь приведется, да можно и явно привести.
(А этот компилятор "xxx" воспринимает именно как string), скобочки можно и расставить, занудливо
это (этих штук в проге более сотни), но возможно. Можно даж некую litle-прожку написать, "автоматизировать процесс".
Но все это обидно как-то.
Придумали K&R такой изящный и легкий язык - и вот - он уже побоку.
Как говорил поэт "Прогресса нет. И хорошо, что нет."
А тут так много прогресса...
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
26.09.2010, 01:16
лет 6 назад, вы юзали версию 2.95, или около того. много времени прошло. сейчас уже версия 4.5.1.
ну а на то что ругается - правильно. по нынешнему стандарту так писать нельзя. "string" - это не char*, это const char*. и благо что вы пытаетесь этот код откомпилировать Си компилятором, с++ компилятор это все интерпритировал бы как ошибки.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
26.09.2010, 02:18
Цитата Сообщение от niXman Посмотреть сообщение
лет 6 назад, вы юзали версию 2.95, или около того. много времени прошло. сейчас уже версия 4.5.1.
ну а на то что ругается - правильно. по нынешнему стандарту так писать нельзя. "string" - это не char*, это const char*. и благо что вы пытаетесь этот код откомпилировать Си компилятором, с++ компилятор это все интерпритировал бы как ошибки.
и тем не менее http://liveworkspace.org/code/... 24e8cb599d
1
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
26.09.2010, 02:20
easybudda, это потому что в опциях компилятора включено подавление варнингов.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
26.09.2010, 02:40
niXman, про 4.5.1 не знаю, а 4.4.0 при включённых предупреждениях ворчит, конечно, но тем не менее компилирует и програмка работает...


Day, ну а узнать, что там на сервере теперь стоит-то - не судьба? Хостерам напишите, поинтересуйтесь... Но в принципе niXman прав в том плане, что
C
1
const char * A[] = { "XXX", "YYY", "ZZZ" };
действительно правильнее писать независимо от того, каким компилятором это компилироваться будет. А вот это предупреждение
Code
1
old_style.c:6: warning: comparison between signed and unsigned integer expressions
как-то не совсем понятно... По-моему параноя какая-то...
1
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
26.09.2010, 02:41
но при этом на codepad.org с вагоном опций threat warning as error ничего не выдавалось
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
26.09.2010, 02:51
alex_x_x, там 4.2.1

Добавлено через 1 минуту
Цитата Сообщение от easybudda Посмотреть сообщение
comparison between signed and unsigned integer expressions
какой код?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
26.09.2010, 02:53
Цитата Сообщение от niXman Посмотреть сообщение
какой код?
C
1
if ( a > b || b < c )
или
C
1
if ( ( a > b ) || ( b < c ) )
без разницы, всё равно ругается...
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
26.09.2010, 02:58
Цитата Сообщение от easybudda Посмотреть сообщение
a > b || b < c
где декларация переменных?

Добавлено через 2 минуты
Цитата Сообщение от easybudda Посмотреть сообщение
comparison between signed and unsigned integer expressions
это говорит о том, что сравниваются переменные разных типов. к примеру int и unsigned int
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.09.2010, 11:11
Day, все эти проблемы растут от того, что современные компиляторы делают более строгие проверки, потому как многолетний опыт показал, что многие конструкции могут привести к плохим последствиям

C
1
char *A[] = { "XXX", "YYY", "ZZZ" };
В левой части присваивания у тебя по сути char*, а в правой - const char*. При такой записи далее можно выполнить операцию записи через указатель из массива A (он же без const), что было бы логической ошибкой. Поэтому современные компиляторы запрещают такое (либо ты в правой части поставишь везде явное преобразование к char*). Правильный вариант написания - в посте #7

А под конец такие слова
/usr/bin/ld: warning: i386 architecture of input file `ZU.o' is
incompatible with i386:x86-64 output
Это когда делается попытка слинковать 32-битный и 64-битный коды. У тебя скорее всего 64-битная версия линукса, в которой компилятор умеет строит коды режима 32 и 64. В общем, опиши более подробно ситуацию и скорее всего получишь конкретный ответ. Ну или тебе самому стало понятно, чего делать
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
26.09.2010, 11:44
Цитата Сообщение от niXman Посмотреть сообщение
где декларация переменных?
да вроде на месте...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int main(void){
    const char * A[] = { "XXX", "YYY", "ZZZ" };
    int i, a, b, c;
    for ( i = 0; i < sizeof(A) / sizeof(*A); ++i )
        printf("%s\n", A[i]);
    a = 1;
    b = 2;
    c = 3;
    if ( ( a > b ) || ( b < c ) )
        printf("TRUE\n");
    else
        printf("FALSE\n");
 
    return 0;
}
Цитата Сообщение от niXman Посмотреть сообщение
это говорит о том, что сравниваются переменные разных типов. к примеру int и unsigned int
и переменные одного типа...
О! Кажется дошло...
Code
1
2
3
4
5
6
7
8
C:\cpp\other>gcc -Wall -o old_style old_style.c
 
C:\cpp\other>gcc -Wall -x c++ -o old_style old_style.c
old_style.c: In function 'int main()':
old_style.c:6: warning: comparison between signed and unsigned integer expressio
ns
 
C:\cpp\other>
Это вообще на цикл ругается! i нужно, как size_t например объявить, и не будет ругаться!
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
26.09.2010, 11:47
Цитата Сообщение от easybudda Посмотреть сообщение
sizeof
всегда возвращает unsigned

Цитата Сообщение от easybudda Посмотреть сообщение
Это заморочки С++ по поводу int vs bool, на сколько я понял
нет.
0
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
26.09.2010, 13:31  [ТС]
Всем спасибо!
Радует, что так много откликов, а ведь и суток не прошло!Значит темка больная.

А у меня все получилось.
На варинги пока забил (все равно ведь преобразовывается верно, просто меня бережет, как мама родная)
А сообщеньице "error: expected primary-expression before '||' token" - я так смеялся, так смеялся!
Дело в том, что у меня там переменная or.
Дальше все понятно, да?
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
26.09.2010, 13:40
Цитата Сообщение от Day Посмотреть сообщение
Дальше все понятно, да?
да уж... это расширение GNU
0
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
26.09.2010, 13:56  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Day, все эти проблемы растут от того, что современные компиляторы делают более строгие проверки, потому как многолетний опыт показал, что многие конструкции могут привести к плохим последствиям
Любые конструкции могут привести к плохим последствиям, если ими неграмотно пользоваться!
Как говаривал Дж.Фокс "Вычислительная машина может делать все, а инструмент, который может делать все, делает иногда странные вещи"
Но если отнять у нас возмжность делать все, то на хрен нам эта машина нужна?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.09.2010, 13:56
Помогаю со студенческими работами здесь

Как при повторном нажатии кнопки в текстовом поле добавлялось значение к старому
Помогите пожалуйста, хочу понять, как сделать вот такое: нажал на кнопку (к примеру &quot;1&quot;) в поле отобразилась 1, а при повторном...

Как перенести сайт на новый домен, если к старому домену нету доступа.
Обычно при переносе на новый домен указываю 301 редирект но в данном случае нету доступа к старому домену (срок регистрации домена кончился...

Как вернуться в ворде?
Просматриваю документ из много страниц. Где-то в середине есть ссылка на &quot;Приложение А&quot;. Ткнул.... улетел на приложение А где-то в...

Как вернуться в начало?
как мне сделать, что бы после одного перевода можно было дальше писать месяца? namespace transleter { class Program { ...

Как вернуться в начало цикла while?
У меня в коде такая структура while ( game == 1) //code// level = 2 while(game == 2 ) //code// level = 3 while (game ==...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru