На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
Страницы: (3) [1] 2 3  все  ( Перейти к последнему сообщению )  
> Поясните за стандарты языка "чистого" СИ: ANSI, C89, C90, C99, C11, C17/18...
    Всем хай! Сходу к делу!

    Я, честно говоря, не одупляю окончательно такого момента.
    Существует достаточно много стандартов языка СИ. Как понимаю, наиболее востребованные: С89 и С99, принятые в 1989 и 1999 годах соот-но.

    Допустим, мне нужно написать прожку на чистом СИ. Я использую IDE Visual Studio 2010 ULTIMATE Edition.
    Ну, во-первых, там нет возможности сразу создать проект на чистом СИ. Ок. Выбираем консольный вариант на С++.
    Во-вторых, затем в обязательном порядке переключаем компилятор на "компилировать как код С (/TC)" через опцию "Проект - Свойства - Свойства Конфигурации - С/С++ - Дополнительно - Компилировать как".
    В-третьих, ну, допустим поставил я эту опцию, но ни хрена непонятно на КАКОЙ СТАНДАРТ ЯЗЫКА СИ теперь идет ориентировка!

    Методом проб стало понятно, что С99 НЕ поддерживается, т к такой код НЕ КОМПИЛИТСЯ:
    ExpandedWrap disabled
      #include "stdafx.h"
      #include <stdio.h>
      struct TTest
      {
          int x;
      };
       
      int main(void)
      {
          TTest test;
          return 0;
      }

    потому что нет зарезервинованного слова struct перед объявлением переменной-структуры test. А вообще стандарт С99 гласит, что можно struct уже и не прописывать. Значит, эта опция в Visual Studio переводит компилятор на стандарт С89??

    А, если нужна программа на стандарте С99, тогда VS вообще НЕ ГОДИТСЯ, так??

    Слушайте, а вообще есть IDE, где при создании проекта можно выбрать СТАНДАРТ языка СИ из перечня?? Или есть такая возможность в самой VS, но т к я нуб в опциях этой ИДЕ, то просто не знаю, где это настраивается??

    И вообще, в интернетах пишут, что НИ ОДИН из существующих компиляторов для языка СИ от мелкомягких на 100% не поддерживает ни один из утвержденных стандартов СИ. Это правда??

    И все-таки, на какой стандарт ориентирован встроенный компилер языка СИ: ну, тут либо С89, либо самый первозданный, то бишь АНСИ?? или тут все вообще не так устроено....
      C99 вообще мало поддерживается компиляторами. Что касается версии Стандарта, то у строчных компиляторов зачастую есть ключики типа --std=c99 или там -Qstd:c++17 итп. Возможно, они просто не выведены в пункты панели параметров проекта в IDE, но тогда можно подобный ключик добавить руками.
      Конкретно VS, и не только она, распознаёт язык по расширению. Если оно .c, то компилирует в режиме C, если .cpp, то C++. Форсить "компилировать как" нужно только для нестандартных для среды расширений. Например, GNUсное .cc студией как C++ может не распознаться.
        Цитата Qraizer @
        Конкретно VS, и не только она, распознаёт язык по расширению. Если оно .c, то компилирует в режиме C, если .cpp, то C++.

        хорошо! но фишка в том, что при создании нового ПРОЕКТА нет возможности выбрать расширение кроме срр, т к оно задается автоматом. Так больше того, если создать ПУСТОЙ проект и попытаться добавить через контекстное меню исходник, ТАМ НЕТ ВЫБОРА на расширение *.c ....капец конечно)

        Т е создать средствами ИДЕ VS расширение *.с вообще вроде нельзя, а может можно, просто я не увидел такую возможность)

        И чего тогда? Ручками править расширение?? ну, согласись, как-то не комильфо в 2019г. и в такой мощнейшей ИДЕ...

        Цитата Qraizer @
        Форсить "компилировать как" нужно только для нестандартных для среды расширений.

        а я всегда опцию ставил, когда нужно было получить компиляцию на С, при этом расширение исходника было *.срр. И все работало)

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

        Qraizer, спс. за ответ. Хотелось бы, чтобы писал больше информации на такие вопросы, т к такого знатока С/С++ всегда с удовольствием почитаю, хоть 25К знаков)

        Добавлено
        <addition>
        файл с расширением *.h добавить можно в проект, а вот *.с нету...либо все-таки как-то добавляется, но явно неинтуитивно и не через контекстное меню...
          Цитата FasterHarder @
          файл с расширением *.h добавить можно в проект, а вот *.с нету...либо все-таки как-то добавляется, но явно неинтуитивно и не через контекстное меню...


          Просто пишешь имя с расширением и всё. Add->New Item->C++ File, Name: test.c
            Цитата FasterHarder @
            файл с расширением *.h добавить можно в проект, а вот *.с нету...либо все-таки как-то добавляется, но явно неинтуитивно и не через контекстное меню...

            Просто "добавить существующий элемент":
            user posted image
            ---
            А вообще - зачем это ?
            Предположим, ты решил писать на ANSI-C.
            С большой вероятностью с любым C++ компилятором
            не будет никаких проблем, только бонусы.
            Пиши исходники хоть *.cpp файлах.
            Сообщение отредактировано: ЫукпШ -
              Цитата ЫукпШ @
              Просто "добавить существующий элемент":

              я понимаю, да), что, если добавлять СУЩЕСТВУЮЩИЙ, то там есть расширение *.с, но ведь я хочу написать С НУЛЯ, т е у меня еще НЕТ этого исходника))

              Цитата ЫукпШ @
              Предположим, ты решил писать на ANSI-C.
              С большой вероятностью с любым C++ компилятором
              не будет никаких проблем, только бонусы.


              да, я понимаю, что С++ надстройка над СИ и весь код сишный плюсы переваривают, НО(!!), где контроль ошибок стандарта. Т е пишу код, который должен быть заточен под АНСИ-СИ, а компиллер С++, в итоге тонкости стандарта игнорируются + я их пропустил в коде. Т е написал прожку НА СИ С ОШИБКАМИ "сишными", компиллер все съел, типа гуд. Но код в итоге не соот-ет стандарту...

              Слушайте, существует ли ИДЕ ЗАТОЧЕННАЯ исключительно под СИ, где при создании проекта ЕСТЬ ОПЦИЯ выбора стандарта?? наверное, нет, т к нецелесообразно...ну и плохо на самом деле) !
                Цитата FasterHarder @
                да, я понимаю, что С++ надстройка над СИ и весь код сишный плюсы переваривают, НО(!!), где контроль ошибок стандарта. Т е пишу код, который должен быть заточен под АНСИ-СИ, а компиллер С++, в итоге тонкости стандарта игнорируются + я их пропустил в коде.
                Вы понимате неправильно. Далеко не все конструкции "голого" Си законны в плюсах (например, инициализация структур через { .имя = значение, } или определение глобальной переменной в нескольких единицах компиляции и даже с разным типом). А вот контроль типов в плюсах, напротив, гораздо строже, чем в "голых" сях (например, нет неявного преобразования из void * в указатель на любой тип).
                  Цитата FasterHarder @
                  Слушайте, существует ли ИДЕ ЗАТОЧЕННАЯ исключительно под СИ

                  user posted image

                  Посмотри вот этот проект. Очень занятная штука.
                  С++ заморочки там точно не прокатят. Однако там есть свои местячковые расширения ANSI C, вот на них можно "нарваться".
                    Цитата FasterHarder @
                    Слушайте, существует ли ИДЕ ЗАТОЧЕННАЯ исключительно под СИ, где при создании проекта ЕСТЬ ОПЦИЯ выбора стандарта?? наверное, нет, т к нецелесообразно...ну и плохо на самом деле) !

                    Вообще, выбор стандарта это опция компилятора, а не ИДЕ. В Visual studio можно создать makefile-project и компилировать в gcc/mingw. Там вроде можно выбрать стандарт Си - std=c99 or -std=iso9899:1999.
                      Цитата FasterHarder @
                      Т е пишу код, который должен быть заточен под АНСИ-СИ, а компиллер С++, в итоге тонкости стандарта игнорируются + я их пропустил в коде.

                      В наборе gcc просто есть С-компилятор.
                      Можно прямо использовать его, и он сам подскажет ошибки.
                      Но если не секрет - а зачем ?
                      В проектах для WIN/Linux использование именно компилятора С
                      практически не имеет смысла. (или очень редко имеется какая-то необходимость)
                      При этом С может быть источником неприятных последствий.
                      ---
                      У этого инструмента другая ниша - программирование микроконтроллеров.
                      Той не малой группы, у которой достаточно ресурсов, чтобы отказаться
                      от ассемблера, но не достаточно ресурсов, чтобы использовать
                      преимущества С++. Но там проекты маленькие и использование С
                      оканчивается безнаказанно.
                        Цитата ЫукпШ @
                        Но если не секрет - а зачем ?

                        хочется, чтобы программа соот-ла стандарту ОТ и ДО

                        Короче, вот к каким выводу я пришел:
                        Я вот ни хрена не понимаю. Есть ОФИЦИАЛЬНЫЕ ДОКУМЕНТЫ, опубликованные ISO/ANSI и им подобным по 700+ страниц, где идет описание стандарта. Причем вроде на каждую версию, ANSI, C99, ... Почему разработчики ПО (допустим, великие MS) не могут написать компиллеры, которые СТРОГО соот-уют этим стандратм, до копеечки. Андреас Хелсберг (или кто там у них гл.сейчас) дал бы команду группе разработчиков создать нужные компилеры под все стандарты СИ. Ресурсов человечьих, как и финансовых у них по самые уши...
                        После этого все эти компилеры включили бы в Visual Studio. Добавили бы тип проекта "Pure C" и при начальных опциях в обязательном порядке шел бы выбор СТАНДАРТА! И компиллер бы подгружался нужный. И ВСЕ! НЕТ ПРОБЛЕМ ВООБЩЕ!

                        На данный момент декларируют, что типа НЕ СУЩЕСТВУЕТ ни одного комплиятора, который бы строго соот-вал стандарту С99. Тогда какого хрена вы создавали этот стандарт, так, для галочки. Профессинальным программистам (не чита мне, нубу) из MS не должно было составить большого труда эта вся работа...

                        Навели массу путаницы, VS вообще не поддерживает изначального такого типа проекта...

                        Ведать нецелесообразно всем этим заморачиваться. Не знаю.
                        Но меня особенно задел момент, когда везде написано. Нет ни одного компилятора, который соот-ет С99. ЧТО ЗА ЧУШь!
                        Есть стандарт языка - будьте добры предоставьте компиллер, заточенный под него иначе, зачем все это...

                        P.S. при переносе проектов, написанных на 1-ом стандарте, на др.стандарт - конвертер автоматический какой-нибудь)
                        Сообщение отредактировано: FasterHarder -
                          Цитата FasterHarder @
                          Почему разработчики ПО (допустим, великие MS) не могут написать компиллеры, которые СТРОГО соот-уют этим стандратм [...] После этого все эти компилеры включили бы в Visual Studio. Добавили бы тип проекта "Pure C" и при начальных опциях в обязательном порядке шел бы выбор СТАНДАРТА!
                          Вы наивны как младенец. Кто же тогда денюжку в техподдержку микрософта понесет, если этот исходник можно будет скомпилиь каким-нибудь GCCом или clangом и получить работающую точно так же программу?
                          GCC как раз строго соответствует, и выбрать стандарт можно - все, как вы хотите. Но вы уже подсели на иглу микрософта, что и требовалось. Еще немного и вы понесете им денюжку на тарелочке с голубой каемочкой. :lol:
                            FasterHarder, MS коммерческая компания. Она будет вкладываться в инструменты, которые востребованы на рынке. Думаю, ответ на твой вопрос понятен без озвучивания: нафик никому из программистов не упёрся чистый и полный c99-компилер.

                            Добавлено
                            Цитата Dushevny @
                            GCC как раз строго соответствует
                            Не полностью.
                              Цитата Qraizer @
                              FasterHarder, MS коммерческая компания. Она будет вкладываться в инструменты, которые востребованы на рынке

                              окэй, окэй!

                              Давай посмотрим рейтинг популярности языков! Я не знаю источника, публикующего самые достоверные данные в этой области. Если знаешь, то дай линк.
                              Но нашел такую инфу, что в 2016 году по индексу TIOBE язык ЧИСТЫЙ СИ держит позицию №2 (~ 13%), выше только Java (~21%). 3-е место у твоих любимых плюсов (~7%).

                              И ты мне твердишь про востребованность...

                              Кстати, мне НЕ ЗАПАДЛО было бы купить что-то у MS, т к их продукты я ЛЮТО уважаю и всегда УВАЖАЛ...Хотя, да, пока все пиратское.
                                P.S.
                                Цитата Dushevny @
                                Кто же тогда денюжку в техподдержку микрософта понесет ... Еще немного и вы понесете им денюжку на тарелочке с голубой каемочкой.
                                И бы предостерёг от дальнейшего развешивания ярлыков. Твоя позиция субъективна. Тем более, что если учесть, что GNU не полностью поддерживает WinAPI и вряд ли когда-нибудь будет, то вернуть ярлык "иглы" будет более чем к месту. WinAPI предоставляет более надёжные средства отказоустойчивости, каковых по надёжности POSIX не имеет в принципе. И саппорт у MS бесплатный, ты каким-то странным образом спутал его с саппортом FSC.

                                Добавлено
                                FasterHarder, ты смотри не в языки, а в версии их стандартов. Счас даже микроконтроллеры програмят на Плюсах, на кой крен им C99? Вот и не выпускают. C99 не только MS засаботировала, большинство поставщиков средств разработки решили, что им это невыгодно, он тупо не найдут рынка сбыта. Что делать, капитализьм, мать его...
                                Цитата FasterHarder @
                                Кстати, мне НЕ ЗАПАДЛО было бы купить что-то у MS, т к их продукты я ЛЮТО уважаю и всегда УВАЖАЛ...Хотя, да, пока все пиратское.
                                Visual Studio 2017 Community бесплатен не только для личного использования, но и для некрупных организаций. И даже для крупных, но не более чем на пяти машинах. Это если с последнего раза ничего в лицензии не менялось.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0437 ]   [ 17 queries used ]   [ Generated: 28.03.24, 20:02 GMT ]