Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 14.12.2018
Сообщений: 4

Не получается скомпилировать программу (Dev C++)

14.12.2018, 00:43. Показов 5436. Ответов 44

Студворк — интернет-сервис помощи студентам
Всем привет, не получается скомпилировать программу в DEV-C++ выдает следующую ошибку
Миниатюры
Не получается скомпилировать программу (Dev C++)  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.12.2018, 00:43
Ответы с готовыми решениями:

Не могу скомпилировать на dev c++, выдает ошибки
#include <stdio.h> void p1(int *m, int k) { int i; for(i=0;i<k;i++) m=-1*m; } void p2(int *m, int k) {

не получается скомпилировать программу в Dev-C++
я написал код ,сто раз перепроверил, но не компилируется! подскажите что в коде неверно, вот код: #include <stdio.h> #include...

Не получается скомпилировать программу
взял отсюда код https://studfiles.net/preview/1744309/page:2/, хочу посмотреть его в деле, мб изменить, но не могу его запустить, выдает...

44
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
16.11.2019, 07:00
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
где вы выкопали такое определение?
Это примерно как спросить, откуда я узнал что 2+2=4. Честно говоря, уже не помню точное место, дату и время.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
На самом деле "компилируется" - получается исполняемый файл (в т.ч. объектник, библиотека и пр.) из файла исходного кода.
Нет, конечно. Ваш "исполняемый файл" может быть просто мусором, который компилятор не убрал за собой. Стандарт языка, кстати, впрямую говорит, что если процесс трансляции привел к выдаче стандартного диагностического сообщения, то ваш "исполняемый файл" именно таким мусором и является.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А диагностические сообщения говорят о том, что синтаксически код верен, но используемые конструкции могут иметь неприятные последствия.
А вот это уже грубейше неверно (!). Стандарт языка требует выдачи диагностических сообщений именно и только при нарушении синтаксических правил и нарушении ограничений (constraint violatons) языка: http://port70.net/~nsz/c/c11/n1570.html#5.1.1.3

То есть диагностических сообщения - это именно то, что в простонародье называется "ошибкой компиляции". В этом вся суть диагностических сообщений.

В остальных случаях диагностические сообщения в языке С просто не требуются вообще, как ясно написано по ссылке.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Впрочем, вменяемые компиляторы (msvs туда, кстати, не входит) честно признают, что программист может знать что делает и ему это зачем-то нужно.
Нет.

Абсолютно все ситуации, когда "программист знает, что делает", допускают написание кода, который одновременно и позволит программисту делать то, что ему нужно, и при этом не вызовет генерации диагностического сообщения. Это всегда возможно. Именно так это и будет выглядит у программиста, который "знает, что делает". Никаких проблем с этим ни у кого никогда не было.

Если же код программиста порождает стандартное диагностическое сообщение - это сразу же автоматически означает, что он НЕ знает, что делает.

А свойство не прекращать компиляцию после выдачи стандартного диагностического сообщения (и даже генерировать какие-то "выполнимые файлы") не имеет никакого отношения к ситуации "программист знает, что делает". Оно имеет прямое отношение к тому, что большинство реальных компиляторов существует в основном для очень приземленной и утилитарной цели: компиляции накопившихся за десятилетия тонн низкоквалифицированного гамнокода, написанного наспех на коленке. Программы эти еще кому-то нужны, а вот заниматься перелопачиванием этого кода никто не хочет. Проще подогнать под него "вседозволяющий" режим работы компилятора.

Побочным эффектом этого, в сожалению, является то, что многие студенты не понимают, что очень многое из того, что "дозволено" во "вседозволяющем" режиме работы компилятора, не имеет вообще никакого отношения к стандартному языку С.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Но в подавляющем большинстве случаев это просто градации ошибок:
Error - неопасные ошибки, поскольку с ними у программы не будет шанса чему-то навредить
Warning - опасные ошибки, поскольку могут возникнуть в произвольное время и толком отловить их компилятор не может
Нет, конечно.

Реалии современных реализаций таковы, что чтобы достичь какой-то осмысленной "градации ошибок" вам нужно специально запросить это у компилятора. Например, в компиляторе GCC это достигается флагом -pedantic-errors. Этот флаг еще не до конца отлажен, но его идея - именно в этом. В режиме -pedantic-errors компилятор рапортует языковые ошибки как "Error", а собственные фантазии-предупреждения - как "Warning".

Без этого флага GCC будет рапортовать очень многие грубые нарушения требований и правил языка как "Warning". Причины такого поведения я уже указал выше.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Но отсутствие прототипа функций (они прописаны в заголовочниках) не дают компилятору возможность проверить правильность аргументов и возвращаемых значений.
Эти разглагольствования "вилами по воде" языку С не интересны. В языке С существует жесткое правило: вызов необъявленной функции является constraint violation, т.е. ошибкой.
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
16.11.2019, 13:21
Интересная получается штука с этими расширениями в Dev-C++. Мне кажется что в данной IDE оптимальней работать с .сpp файлами. Вот я когда сменил расширение файла.с, компилятор начал ругаться на int в начале цикла.
Code
1
2
[Error] 'for' loop initial declarations are only allowed in C99 or C11 mode
[Note] use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code
Хотя все настройки компилятора стоят по умолчанию. Приходится подключать C99, тогда компилятор нормально реагирует. Потом я обратно меняю расширение файла.срр и компилятор снова ругается, уже на С99, типа это не для С++.
Code
1
[Warning] command line option '-std=c99' is valid for C/ObjC but not for C++
В общем решил, что все оптимально компилируется и работает, когда у файла.срр расширение.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
16.11.2019, 13:22
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это примерно как спросить, откуда я узнал что 2+2=4.
Это примерно как узнать с чего вы взяли что 2+2=6. Потому что ваше высказывание противоречит не только поведению компиляторов, но и самой идее warning'ов, да и подходу Си, который полагает, что если программист что-то делает, ему это зачем-то надо.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Абсолютно все ситуации
Это ОЧЕНЬ сильное утверждение, интуитивно кажущееся неверным. Тем более с учетом наслоений совместимости с первыми стандартами, где подобным не заморачивались.
В другой ситуации это было бы неспортивно, но раз уж вызвались - докажите свое высказывание.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
16.11.2019, 19:16
Цитата Сообщение от мама Стифлера Посмотреть сообщение
В общем решил, что все оптимально компилируется и работает, когда у файла.срр расширение.
Но к программированию на языке С это не имеет никакого отношения.

---

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Потому что ваше высказывание противоречит не только поведению компиляторов,
но и самой идее warning'ов, да и подходу Си, который полагает, что если программист что-то делает, ему это зачем-то надо.
Мое высказывание ничуть не противоречит поведению компиляторов. Компиляторы в подавляющем большинстве случае ведут себя исключительно правильно, в полном соответствии с требованиями стандарта языка.

Мое высказывание противоречит лишь вашим личным домыслам на тему поведения компиляторов, которые не имеют ничего общего с реальностью. Вот эти вот "самой идее warning'ов", "подходу Си, который полагает..." - это все исключительно продукт вашего воображения, построенный на некоей самодельной доморощенной интерпретации поведения компиляторов, которая когда-то давно свернула куда-то не в ту сторону. Это буквальный аналог анекдота про Василия Ивановича и его диссертацию: "Безногий таракан не слышит".

Вы, очевидно, только сейчас начинаете понимать, насколько неправильными являются эти ваши домыслы, но они уже успели "зацементироваться" и уходят с трудом.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
но раз уж вызвались - докажите свое высказывание.
О, с тривиально-истинными высказываниями вида "любую программу на языке С можно написать не нарушая требований стандарта языка С" все очень просто: обязанность "доказывать" лежит на тех, кто с этими высказываниями не согласен. Несогласные, очевидно, имеют на уме какие-то контрпримеры, так? Если так, то давайте их в студию. А голословные возражения - не принимаются.
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
16.11.2019, 20:15
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Но к программированию на языке С это не имеет никакого отношения
ну тут можно понять от вас два варианта:
1. если код написан на С, но имеет расширение срр, то к С отношения не имеет
2. если код написан на С ,то не имеет значения какое у него расширение, это все равно С
Если вы имели ввиду первый вариант, тогда я вас никогда не пойму.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
16.11.2019, 20:55
Цитата Сообщение от мама Стифлера Посмотреть сообщение
ну тут можно понять от вас два варианта:
1. если код написан на С, но имеет расширение срр, то к С отношения не имеет
2. если код написан на С ,то не имеет значения какое у него расширение, это все равно С
Если вы имели ввиду первый вариант, тогда я вас никогда не пойму.
Какое расширение имеет файл действительно не имеет никакого значения. Однако какой компилятор используется для компиляции кода - компилятор С или компилятор С++ - имеет огромное значение. Когда вы даете своему файлу расширение .cpp, это в традиционных реализациях автоматически приводит к тому, что для компиляции вашего кода будет использоваться компилятор С++.

В рамках понимания этого факта, я имею в виду именно первый вариант.

Язык С не является и некогда не являлся подмножеством языка С++. Большое количество программных конструкций, написанных на языке С, не будет даже компилироваться в рамках языка С++. Большое количество программных конструкций, написанных на языке С, будут иметь совершенно иную семантику в языке С++.

Поэтому такая посылка как, "даже если я компилирую код компилятором С++ это все равно С" (ваш второй вариант) - это грубейше неправильно. С и С++ - очень сильно различающиеся языки. "Программирование на С внутри С++" - это бессмысленная профанация.

Мы и здесь довольно часто здесь натыкаемся на примеры ляпсусов, допущенных начинающими программистами, проистекающих именно из такой профанации.
0
из племени тумба-юбма
 Аватар для мама Стифлера
2523 / 1819 / 419
Регистрация: 29.11.2015
Сообщений: 8,857
Записей в блоге: 15
16.11.2019, 21:36
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Программирование на С внутри С++" - это бессмысленная профанация
Даже не знаю что ответить. Возможно если бы я разбирался лучше, то возразил бы, а может и не возразил
0
16.11.2019, 22:03

Не по теме:

Припомнил, как лет 20 назад в первый раз FreeBSD устанавливал. Залил с CD, переписал конфиг ядра, выкинув всё лишнее, дописав всё нужное. Стал собирать - святые угодники! Варнинг на варнинге и варнингом погоняет! Целый час (или больше) пролюбовавшись на различного рода предупреждения, сильно удивляюсь, что всё вроде бы удачно получилось, перегружаюсь - и в правду работает. С тех пор сколько раз бздю ни собтрал, так и не знаю - то ли компиляторы паранойики выпускают, то ли в Беркли свою ось всё так же на коленке пишут левой пяткой... Но надо заметить, годами потом работает, пока детальки в компе от старости не посыпятся.

0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
16.11.2019, 23:31
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Мое высказывание ничуть не противоречит поведению компиляторов.
Ваше высказывание подразумевает обязательное прерывание компиляции при любом диагностическом сообщении. Тогда зачем вводили градацию error и warning?
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
обязанность "доказывать" лежит на тех, кто с этими высказываниями не согласен.
Ничего подобного. Любое высказывание доказывается высказавшем. Кстати, попытка подмены понятий "Абсолютно все ситуации, <> допускают написание кода, <> и при этом не вызовет генерации диагностического сообщения." на "любую программу на языке С можно написать не нарушая требований стандарта языка С" тоже не сработает, по крайней мере пока не докажете их эквивалентности.
Вот если бы я начал с высказывания, что существуют программы, которые нельзя написать без предупреждений компилятора, обязанность бы лежала на мне.
Конечно, доказательства всеобщности обычно на порядки сложнее доказательств существования, так что требовать такое не принято. С другой стороны, кто ж виноват, что вы раскидываетесь подобными высказываниями.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
17.11.2019, 01:56
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ваше высказывание подразумевает обязательное прерывание компиляции при любом диагностическом сообщении.
Что? Ну зачем же так нагло врать? Ничего подобного я никогда не говорил.

Мое высказывание - это лишь цитата из стандарта языка, ссылку на который я уже давал. При обнаружении нарушений синтаксических правили или ограничений, компилятор обязан выдать хотя бы одно диагностическое сообщение, но не обязан прерывать процесс трансляции. Однако (!) в такой ситуации стандарт языка более не признает данную программу "программой на языке С" и не дает никаких гарантий по поводу ее поведения. Поведение программы не определено.

Как я говорил раньше, ситуация тут совершенно аналогична ситуации с неинициализированными переменными. Вы можете взахлеб нам доказывать, что в вашем любимом компиляторе все неинициализированные переменные гарантированно равны нулю (и это может быть чистой правдой), но с точки зрения языка С этот ваш "нуль" - это такой случайный мусор, как и любое другое непредсказуемое значение.

Тоже самое относится к программам, в процессе компиляции которых было выдано стандартное диагностическое сообщение. Вы можете взахлеб рассказывать нам, что ваша программа "компилируется" и "работает", но с точки зрения языка С результат работы компилятора в таком случае - это не более чем случайный мусор.

Так что ни о каком "обязательном прерывании" я никогда не говорил. Продолжение компиляции в такой ситуации может быть вполне полезно - для поиска других ошибок, например.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Тогда зачем вводили градацию error и warning?
Как это "зачем"? Изначальное назначение этой градации естественно, очевидно и понятно.

Я всегда подчеркиваю, что речь идет в первую очередь о стандартных диагностических сообщениях. Т.е. сообщениях, выдача которых однозначно требуется стандартом языка. Это сообщения (еще раз) о нарушении синтаксических правил языка или о нарушении constraints. Все такие сообщения должны классифицироваться компилятором как "errors". Так как после такого сообщения поведение уже не определено, компилятор вправе делать что угодно: прерывать компиляцию, продолжать компиляцию, и т.д.

В дополнение к этим сообщениям, компилятор имеет право выдавать не требуемые стандартом языка сообщения: 1) в ответ на корректный но "подозрительный" код, 2) в ответ на код, который не нарушает синтаксис и constraints, но явно порождает неопределенное поведение, 3) в ответ на код, который 100% корректен здесь, но может быть не портабелен, 4) и т.д. Вот это - то, ради чего создавались "warnings".

Errors - обязательные, требуемые стандартом языка диагностические сообщения. Warnings - совершенно не обязательная отсебятина компилятора разной степени полезности. Традиционно, "errors" прерывали компиляцию, а "warnings" - нет. И это вполне разумное поведение, пока соблюдаются принципы, описанные выше.

Однако потом все заверте... и компиляторы в определенный момент очутились перед гигантской кучей старинного кривого и косого нестандартного гамнокода, который все таки нужно как-то худо-бедно компилировать. Вот по этой причине и началось постепенное ползучее перетаскивание сообщений из класса "error" в класс "warning", результаты которого мы и наблюдаем сегодня.

Нарушения стандарта языка в таком перетаскивании, кстати, нет. В стандарте нет никакого деления на "errors" и "warnings". Стандарт требует лишь выдачи диагностического сообщения в ответ на нарушение.

А вот помнить, что современные компиляторы могут рапортовать грубые "errors" как невинные "warnings", копаться в этих сообщениях и разбираться, какие из них являются стандартными диагностическими сообщениями, а какие - отсебятиной компилятора - ваша задача. И сделать вы это можете только на основе знания стандарта языка.

Сжалившись над теми, кто слабовато разбирается в стандарте языка, авторы некоторых компиляторов ввели ключи, вроде -pedantic-errors, призванные восстановить потерянное идеальное деление на "errors" и "warnings", как я его описал выше. Они работают, хоть и не всегда точно.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ничего подобного. Любое высказывание доказывается высказавшем.
Нет, конечно. У нас тут не математическая теория.

Думайте об этом как о производителе автомобилей, который продает вам автомобиль. У этого производителя хорошая репутация, но она не может гарантировать вам, что в автомобиле нет дефектов. Тем не менее производитель не должен доказывать вам, что этих дефектов нет. Машина едет, фары включаются, компьютер не ругается - все в порядке. Производитель фактически "голословно" утверждает, что машина исправна. А вот если вы в процессе эксплуатации обнаружите в машине какие-то дефекты - это ваша задача, убедительно продемонстрировать наличие этих дефектов производителю.

Точно так же и язык С. Это язык обладает хорошо установившейся репутацией. И я вам открытым текстом говорю, что при написании программ на языке С не нужно нарушать требований стандарта языка С (тавтология, однако). Если вы, поверив мне, обнаружите нарушения этого обещания - пожалуйста, приводите факты, мы их радостью детально рассмотрим.

Если же вас не устраивает такое положение дел - ну так никто вас и не заставляет пользоваться языком С.
0
12 / 10 / 2
Регистрация: 15.12.2017
Сообщений: 70
17.11.2019, 02:44
задам тупой вопрос, но вдруг прокатит.
стандарт си на русский переводили?


Добавлено через 28 минут
мама Стифлера, инициализацию int в начале блока цикла у меня компилятор съел и при с90 и с99.
по переменным написано их можно объявлять в начале программного блока. блок это
C
1
{ }
значит и в начале цикла можно. НО
если
C
1
2
3
4
5
6
    int a;
    for (a=1;a<10;a++)
    {int b=0;
        b+=a;
        printf("a=%d b=%d\n",a,b);  
    }
использование b бессмысленно, т.к. каждый цикл оно будет ровняться нулю
C
1
2
3
4
5
6
    int a;
    for (a=1;a<10;a++)
    {int b;
        b+=a;
        printf("a=%d b=%d\n",a,b);  
    }
ещё бессмысленней, ибо тогда b содержит не определённый мусор.
как и чем вам поможет переменная в цикле???,
покажите, ну очень интересно.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
17.11.2019, 08:36
Цитата Сообщение от apostata Посмотреть сообщение
стандарт си на русский переводили?
Был такой проект. Но у меня не сохранилось ссылки. И чем кончилось - не знаю.

Цитата Сообщение от apostata Посмотреть сообщение
мама Стифлера, инициализацию int в начале блока цикла у меня компилятор съел и при с90 и с99.
Мама Стифлера, очевидно, вел (вела?) речь об объявлении переменных в заголовке цикла

C
1
for (int i = 0;...
каковая возможна лишь с C99.

Цитата Сообщение от apostata Посмотреть сообщение
по переменным написано их можно объявлять в начале программного блока.
Объявлять переменные в начале блока в стандартном С можно было всегда. Но речь не об этом.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
17.11.2019, 13:36
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Как я говорил раньше, ситуация тут совершенно аналогична ситуации с неинициализированными переменными. Вы можете взахлеб нам доказывать, что в вашем любимом компиляторе все неинициализированные переменные гарантированно равны нулю (и это может быть чистой правдой), но с точки зрения языка С этот ваш "нуль" - это такой случайный мусор, как и любое другое непредсказуемое значение.
и если для данной архитектуры и данного компилятора это гарантируется их изготовителями и дает какое-то преимущество, в в крайнем случае этим можно пользоваться - с соответствующими комментариями, разумеется.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
ваша программа "компилируется" и "работает", но с точки зрения языка С результат работы компилятора в таком случае - это не более чем случайный мусор.
Но программы пишутся не под абстрактную машину Си, а под конкретную железяку, которая может давать свои гарантии, не предусмотренные языком. И разработчики языка / компилятора это учитывают: "программист знает что делает, но если он делает странное, мы обратим на это его внимание".
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Нет, конечно. У нас тут не математическая теория.
А в чем разница? Вы ведь делаете абстрактное утверждение об абстрактной детерминированной машине. То есть полностью соответствуете условиям абстрактной точной науки.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
У этого производителя хорошая репутация
Производитель фактически "голословно" утверждает, что машина исправна
...но перед этим он провел кучу расчетов, провел краш-тесты, проверял каждый модуль и определяет качество деталей, требуемое от поставщиков. То есть в отличие от вас, его высказывания не голословны и при должном старании можно даже проверить на чем они основаны. И, кстати, в отличие от вас, он не утверждает, что его машины абсолютно надежны.
0
12 / 10 / 2
Регистрация: 15.12.2017
Сообщений: 70
17.11.2019, 13:50
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Но программы пишутся не под абстрактную машину Си, а под конкретную железяку, которая может давать свои гарантии, не предусмотренные языком. И разработчики языка / компилятора это учитывают: "программист знает что делает, но если он делает странное, мы обратим на это его внимание".
э... я как-то считал, что мы пишем программу работает везде-всегда-правильно.
а железяка максимум носит отличие AMD & INTEL
а во всех остальных случаях мы пишем, что то где нам "плевать" на компилятор (ну в смысле он один и только для этого чипа) т.е. как он скажет так и будет. а для тех кто "программист знает что делает" добро пожаловать в машинные инструкции.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12844 / 7593 / 1766
Регистрация: 25.07.2009
Сообщений: 13,981
17.11.2019, 20:55
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Но программы пишутся не под абстрактную машину Си, а под конкретную железяку, которая может давать свои гарантии, не предусмотренные языком.
В жизни чаще наоборот бывает - конкретная архитектура накладывает дополнительные ограничения. Собственно один из таких примеов не так давно на форуме обсуждался ( https://www.cyberforum.ru/post13833583.html ). А вот чтобы какая-то архитектура позволяла делать то, что стандартом языка явно запрещено, что-то не припомню. Бывают ещё случаи Implementation defined, но их тоже трудно бонусами считать...
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
18.11.2019, 11:38
Цитата Сообщение от apostata Посмотреть сообщение
э... я как-то считал, что мы пишем программу работает везде-всегда-правильно.
В идеальном случае да, но изредка приходится применять платформо-специфические оптимизации.
Цитата Сообщение от apostata Посмотреть сообщение
а железяка максимум носит отличие AMD & INTEL
Ага, щас! А что на счет микроконтроллеров? ARM, AVR, PIC, x51? Не все из них даже обладают фон-неймановской архитектурой (одинаковый доступ к оперативной и постоянной памяти). На них, кстати, обычно не имеет смысла гоняться за совместимостью с х86.
Цитата Сообщение от easybudda Посмотреть сообщение
В жизни чаще наоборот бывает - конкретная архитектура накладывает дополнительные ограничения.
Если архитектура что-то запрещает, в ее компилятор все же часто вкорячивают костыль, который данную функциональность эмулирует.
На счет "гарантий" архитектуры я имел в виду действительно что-то вроде implementation defined: компилятор ругается, что "неопределенное поведение", но для данной железки - вполне определенное.
.
И еще раз напомню: пользоваться хаками нужно только в крайнем случае, когда выигрыш от них превышает трудность портирования и сопровождения кода. При этом хаки нужно как минимум документировать: почему это работает и почему не сделано по-другому.
0
12 / 10 / 2
Регистрация: 15.12.2017
Сообщений: 70
18.11.2019, 14:36
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ага, щас! А что на счет микроконтроллеров? ARM, AVR, PIC, x51?
что то мне подсказывает это не для большинства, ох как не для большинства особенно в этом разделе.
а тек кто решил ардуинку покрутить явно не программисты, в большей массе, в прямом смысле (так копипасты)
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
18.11.2019, 14:56
apostata, тут в теме уже пошли совершенно экзотические и умозрительные случаи, либо максимально общие, так что все нормально
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
18.11.2019, 22:12
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Но программы пишутся не под абстрактную машину Си, а под конкретную железяку,
Программы вообще не пишутся "под железяку". Под "железяку" пишется драйвер, а не программа. А программирование начинается именно и только тогда, когда оно полностью оторвано от "железяк". Все, что делается для "железяк", в том числе их софтверная поддержка - это админство, эникейщество. Это не программирование вообще.

(Я, разумеется, утрирую, но лишь для того, чтобы подчеркнуть чудовищную бессмысленность заявления "программы пишутся под конкретную железяку".)

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
которая может давать свои гарантии, не предусмотренные языком. И разработчики языка / компилятора это учитывают: "программист знает что делает, но если он делает странное, мы обратим на это его внимание".
Нет, нет, нет... Это опять какие-то огульные разглагольствования "ни о чем".

Напомню, что здесь речь идет не о каких-то туманных "гарантиях конкретной железяки", а о существенно более узком и существенно более четко очерченном конкретном вопросе: написание ошибочного с точки зрения языка кода. Ошибочного именно в том смысле, что код нарушает синтаксические правила языка или его ограничения (constraints). К "гарантиям железяки" это все не имеет никакого отношения. При чем они здесь вообще?

Типовой "программист от сохи" научился уважать синтаксические правила языка только потому, что компилятор его лупит кувалдой по башке за нарушение этих правил. А вот уважать constraints его компилятор таким способом научил не до конца и не все. Вот и все объяснение. Никакие "гарантии железяки" к этому вопросу не имеют.

И, еще раз, в языке С нет никакой разницы между нарушением синтаксических правила языка и нарушением constraints. Никогда и нигде в языке С нет необходимости для нарушения constraints, какие бы "железяки" вы там ни программировали. Нарушение constraints в С коде - это всегда криворукость нерадивого кодера.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
И еще раз напомню: пользоваться хаками нужно только в крайнем случае,
Мимо. Вы снова пытаетесь напустить тумана не по теме. "Хаки" - это завязки на определенность неопределенного или неспецифицированного поведения. Написание грубо некорректного кода с точки зрения языка кода никакого отношения к "хакам" не имеет. Это не "хаки", а банальная некомпетентность автора кода.

Независимо от степени "хаковости", никогда и нигде в языке С не потребуется написания некорректного кода. Поэтому "хаки" к этой теме никакого отношения не имеют.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
о перед этим он провел кучу расчетов, провел краш-тесты, проверял каждый модуль и определяет качество деталей, требуемое от поставщиков. То есть в отличие от вас, его высказывания не голословны и при должном старании можно даже проверить на чем они основаны. И, кстати, в отличие от вас, он не утверждает, что его машины абсолютно надежны.
Вы пытаетесь фактически объявить автором языка С и приписать мне авторство того, что фактически является прямыми цитатами из стандарта языка. Язык С, напомню вам, тоже не вчера придуман и его требования основаны на опыте, который превосходит вышеупомянутые "крэш-тесты" по своему объему и качеству на несколько порядков.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
19.11.2019, 09:16
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Программы вообще не пишутся "под железяку". Под "железяку" пишется драйвер, а не программа.
Понятно. С контроллерами вы дела не имели. Разницы между драйвером и программой тоже не знаете.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Все, что делается для "железяк", в том числе их софтверная поддержка - это админство, эникейщество. Это не программирование вообще.
А системные программисты (которые пишут ядра ОС, драйвера, прошивки) не знали! Вы уж просветите их.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Никогда и нигде в языке С нет необходимости для нарушения constraints
Опять куда-то перескакиваете? Речь шла об удовлетворении всех предупреждений компилятора.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вы пытаетесь фактически объявить автором языка С и приписать мне авторство того, что фактически является прямыми цитатами из стандарта языка.
Нет, я пытаюсь проиллюстрировать, что ваше заявление "Абсолютно все ситуации, когда "программист знает, что делает", допускают написание кода, который <...> не вызовет генерации диагностического сообщения" все еще не подкреплено доказательствами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.11.2019, 09:16

Не получается скомпилировать программу
Это всего лишь кусок кода, решил его протестить перед последующим продолжением. Запускаю в консоле все пусто, компилятор ни на что не...

Не получается скомпилировать программу из исходников в SharpDevelop
Здравствуйте, дорогие форумчане Имеется вопрос относительно ошибок, возникающих при компиляции нескольких файлов-исходников в единую,...

Emacs - Не получается даже скомпилировать программу
Помогите новичку в emacs. Установил на VB ubuntu. Но у меня не получается даже скомпилировать программу. Создал вручную -...

Не получается скомпилировать программу, при созданных условиях
В методе main создай объект Man, сохрани ссылку на него в переменную man. Создай также объект Woman и сохрани ссылку на него в переменную...

clang не получается скомпилировать программу из нескольких cpp файлов в биткод для LLVM
Пытаюсь скомпилировать программу в биткод для выполнения её с помощью виртуальной машины LLVM. Программа состоит из нескольких cpp файлов....


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru