Как установить mingw-w64 и msys2?

Содержание разделаIn this section

Совместное или повторное использование параметров проекта Visual StudioShare or reuse Visual Studio project settingsСоздание файла. props с настраиваемыми параметрами сборки, которые можно использовать совместно или повторно.How to create a .props file with custom build settings that can be shared or reused.

Наследование свойств проектаProject property inheritanceОписывает порядок вычисления для файлов Props, targets, VCXPROJ и переменных среды в процессе сборки.Describes the order of evaluation for the .props, .targets, .vcxproj files and environment variables in the build process.

Изменение свойств и целевых объектов без изменения файла проектаModify properties and targets without changing the project fileСоздание временных параметров сборки без изменения файла проекта.How to create temporary build settings without having to modify a project file.

Опции компилятора GCC

Для GCC доступно большое количество опций компилирования, начиная от оптимизации кода, компилирование с учетом стандарта ISO/ANSI или без учета оного, до опций отладки, опций компилирования кода-шаблона. GCC также предоставляет некоторые опции, характерные только для pSeries (бывших RS/6000) и платформ PowerPC.

Полное описание опций, доступных для платформ POWER и PowerPC, размещено на . Ниже мы рассмотрим несколько опций, которые мы сочли особо важными.

Из опций, которые используются для настройки типа процессора, например, и , лучше использовать стандартные опции, предоставляемые GCC. На AIX 4.3 и AIX 5.1, стандартными опциями являются — этот код будет работать на всех компьютерах с процессором семейства pSeries (RS/6000). На AIX 5.2 и следующих версиях, стандартной опцией является — этот код будет работать на процессорах pSeries PowerPC. GCC принимает тип современного процессора, ассоциированного с текущим релизом AIX, в качестве модели процессора для задач планирования.

Для оптимизации под определенный процессор или класс процессора следует использовать опции , , , и другие. Не стоит использовать опции , , или . Хотя они и доступны, они не предназначены для использования конечным пользователем. Применение по отдельности опции или других опций может повлечь непредсказуемые результаты, потому что компилятор может находиться в несовместимом режиме с целевым процессором.

Чтобы скомпилировать приложение в 64-х битном режиме, следует использовать опцию , которая активирует 64-х битный машинный интерфейс (ABI в дальнейшем) AIX, например, 64-битные указатели, 64-битные длинные типы, и инфраструктуру, которая необходима для их поддержки. Установка влечет за собой установку и , тогда как отключает 64-битный ABI и опцию . GCC по умолчанию использует .

При получении сообщения об ошибке от компоновщика, в котором говорится что переполнено доступное пространство TOC (Table of Contents — области оглавления), можно уменьшить пространство TOC при помощи команды . По умолчанию GCC использует . который распределяет по крайней мере одну TOC-запись для каждой уникальной неавтоматической ссылочной переменной. Также GCC помещает в TOC константы с плавающей точкой. Однако, в TOC доступно только 16 384 элементов, и поэтому вполне можно его переполнить. Опция GCC позволяет ставить в соответствие с одним элементом TOC только одну функцию.

компилирует и компонует приложение с библиотекой POSIX threads таким же образом, как это было бы сделанно в среде VisualAge (или XL) C/C++. В VisualAge (или XL) C/C++ для обеспечения поддержкт потоков можно выполнить компиляцию и компоновку при помощи опций или , но эти опции не будут работать с GCC. Поэтому для GCC код с поддержкой потоков должен быть скомпонован с использованием . Опция установит соответствующие флаги как для препроцессора, так и для компоновщика.

Опция создает информацию об отладке, характерную для на уровне 2. Отладочная информация может содержать некоторые дополнительные сведения, предназначенные для GNU Debugger (GDB). Чтобы создать отладочную информацию более совместимую с AIX , следует использовать опцию .

GCC для AIX не поддерживает полностью опцию . Применение этой опции прекратит использование регистров с плавающей точкой в GCC, но, однако, вспомогательные библиотеки GCC и библиотеки AIX будут продолжать использовать регистры с плавающей точкой.

Использование опций и в конфигурации AIX не корректно. В документации указаны все опции для целевых платформ «rs6000» GCC. Но не все опции доступны для использования с какой-либо определенной конфигурацией.

Для передачи опций напрямую платформенно-зависимому компоновщику AIX, используйте .

Опции компиляторов G++ и GCC

Описание опций, характерных для компилятора g++, размещено по этой . Эти опции действительны и для AIX.

Также полное описание опций, характерных для компилятора gcc, размещено на . Эти опции действительны также для AIX и других UNIX-систем.

Список опций для оптимизации размещен на .

Наиболее распространенной опцией оптимизации является , которая позволяет, увеличить производительность исполняемого файла или библиотеки. предоставляет больше возможностей оптимизации, которые могут увеличить производительность за счет более длительного процесса компиляции. увеличивает производительность и при этом пытается уменьшить размеры программного кода.

Дополнительные опции оптимизации, которые полезны для сложных научных расчетов, включают в себя и . , и позволяют компилятору увеличить производительность за счет точного соответствия стандартам IEEE и ISO для математических функций.

3 GCC Command Options

When you invoke GCC, it normally does preprocessing, compilation,
assembly and linking. The “overall options” allow you to stop this
process at an intermediate stage. For example, the -c option
says not to run the linker. Then the output consists of object files
output by the assembler.
See .

Other options are passed on to one or more stages of processing. Some options
control the preprocessor and others the compiler itself. Yet other
options control the assembler and linker; most of these are not
documented here, since you rarely need to use any of them.

Most of the command-line options that you can use with GCC are useful
for C programs; when an option is only useful with another language
(usually C++), the explanation says so explicitly. If the description
for a particular option does not mention a source language, you can use
that option with all supported languages.

The usual way to run GCC is to run the executable called , or
when cross-compiling, or
to run a specific version of GCC.
When you compile C++ programs, you should invoke GCC as
instead. See ,
for information about the differences in behavior between
and when compiling C++ programs.

The program accepts options and file names as operands. Many
options have multi-letter names; therefore multiple single-letter options
may not be grouped: -dv is very different from ‘-d -v’.

You can mix options and other arguments. For the most part, the order
you use doesn’t matter. Order does matter when you use several
options of the same kind; for example, if you specify -L more
than once, the directories are searched in the order specified. Also,
the placement of the -l option is significant.

Many options have long names starting with ‘-f’ or with
-W’—for example,
-fmove-loop-invariants, -Wformat and so on. Most of
these have both positive and negative forms; the negative form of
-ffoo is -fno-foo. This manual documents
only one of these two forms, whichever one is not the default.

Some options take one or more arguments typically separated either
by a space or by the equals sign (‘=’) from the option name.
Unless documented otherwise, an argument can be either numeric or
a string. Numeric arguments must typically be small unsigned decimal
or hexadecimal integers. Hexadecimal arguments must begin with
the ‘0x’ prefix. Arguments to options that specify a size
threshold of some sort may be arbitrarily large decimal or hexadecimal
integers followed by a byte size suffix designating a multiple of bytes
such as and for kilobyte and kibibyte, respectively,
and for megabyte and mebibyte, and
for gigabyte and gigibyte, and so on. Such arguments are
designated by byte-size in the following text. Refer to the NIST,
IEC, and other relevant national and international standards for the full
listing and explanation of the binary and decimal byte size prefixes.

See , for an index to GCC’s options.

• :    Brief list of all options, without explanations.
• :    Controlling the kind of output:
an executable, object files, assembler files,
or preprocessed source.
• :    Compiling C++ programs.
• :    Controlling the variant of C language compiled.
• :    Variations on C++.
• :    Variations on Objective-C
and Objective-C++.
• :    Controlling how diagnostics should
be formatted.
• :    How picky should the compiler be?
• :    More expensive warnings.
• :    Producing debuggable code.
• :    How much optimization?
• :    Enabling profiling and extra run-time error checking.
• :    Controlling header files and macro definitions.
Also, getting dependency information for Make.
• :    Passing options to the assembler.
• :    Specifying libraries and so on.
• :    Where to find header files and libraries.
Where to find the compiler executable files.
• :    Specifying conventions for function calls, data layout
and register usage.
• :    Printing GCC configuration info, statistics, and
debugging dumps.
• :    Target-specific options, such as compiling for a
specific processor variant.
• :    How to pass switches to sub-processes.
• :    Env vars that affect GCC.
• :    Compiling a header once, and using it many times.

Next: , Previous: , Up:   [][]

Отчёт о покрытии ветвлений

Для получения отчёта с информацией о выборе ветвлений надо добавить параметр как для вызова , так и для вызова :

Теперь вы можете повторно открыть и познакомиться с новой информацией. Знаки возле означают, что программа ни разу не зашла в первую ветку (ветку then), но заходила во вторую (ветку else). В остальных ветвлениях if/else программа заходила в разное время в обе ветки.

У любопытных людей может возникнуть вопрос: почему в конце функции main тоже написано ? Это правильный вопрос, детектив. Дело в том, что каждая функция может быть завершена либо нормальным способом (вернув что-либо на инструкции return), либо выбросом исключения. Если немного модифицировать программу, написав всегда бросающую исключение функцию , то branch coverage для вызова изменится на : функция ни разу не завершилась нормально, но как минимум один раз завершилась с выбросом исключения:

Первая программа на Linux. Компилятор g++

Последнее обновление: 28.08.2017

В прошлой теме было рассмотрено создание первой программы на Windows. Теперь рассмотрим создание первой программы на Linux, в
частности, в среде Ubuntu 16.04. На Linux также популярным компилятор для создания программ является g++. Поэтому в данном случае также будем использовать
этот компилятор.

Как правило, многие дистрибутивы Linux, в том числе и Ubuntu, уже по умолчанию содержат установленный компилятор g++, который мы сразу же можем использовать. Но даже если вдруг он не установлен, то его можно доустановить в терминале через команду:

sudo apt-get install g++

В остальном, если мы будем использовать для компиляции компилятор g++, все будет аналогично созданию программы на Windows.

Определим в файловой системе каталог для исходных файлов с кодом на С++ и создадим в нем новый файл hello.c со следующим кодом:

#include         		// подключаем заголовочный файл iostream

int main()							// определяем функцию main
{									// начало функции
	std::cout 

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

Для вывода строки на консоль необходимо подключить нужный функционал. Для этого в начале файла идет строка

#include 

Данная строка представляет директиву препроцессора, которая позволяет подключить библиотеку iostream. Эта библиотека нужна для вывода строки на консоль.

Далее идет определение функции main. Функция main должна присутствовать в любой программе на С++, с нее
собственно и начинается выполнение приложения.

Функция main состоит из четырех элементов:

  • Тип возвращаемого значения. В данном случае это тип int. Этот тип указывает, что функция должна
    возвращать целое число.

  • Имя функции. В данном случае функция называется main.

  • Список параметров. После имени функции в скобках идет список параметров. Но в данном случае скобки пустые, то есть
    функция main не принимает параметров.

  • Тело функции. После списка параметров в фигурных скобках идет тело функции. Здесь и определяются собственно те
    действия, которые выполняет функция main.

    {
    	std::cout 

В теле функции происходит вывод строки на консоль. Для обращения к консоли используется стандартный поток вывода std::cout.
С помощью оператора в этот поток (в данном случае фактически на консоль) передается строка символов, которую надо вывести на консоль, то есть «Hello World!».
В конец строки добавлена специальная управляющая последовательность «\n», которая позволит после вывода текста перевести курсор на новую строку.

В функции осуществляем выход из функции с помощью оператора return. Так как функция должна возвращать целое число, то после return указывается число 0.
Ноль используется в качестве индикатора успешного завершения программы.

После каждой инструкции в языке C++ ставятся точка с запятой.

Перейдем к терминалу и вначале с помощью команды cd перейдем к каталогу, где расположен файл с исходным кодом.

Далее для компиляции программы введем команду:

g++ hello.cpp -o hello

Кроме имени файла с исходным кодом компилятору передается параметр . Он указывает, что мы хотим скомпилировать файл по имени hello.
Если этот параметр не передать, то будет создан файл с именем по умолчанию — a.out.

В итоге после выполнения выше приведенной команды в папке с файлом hello.cpp появится скомпилированный файл, который будет называться
hello. И мы сможем его запустить с помощью следующей команды:

./hello

И на консоль будет выведена строка «Hello World!».

НазадВперед

Использование библиотек

В крупных проектах по разработке ПО объектные модули, полученные при трансляции отдельных исходных
файлов, компонуются в библиотеки объектных модулей (или просто библиотеки). С помощью библиотек удаётся
достичь сразу нескольких целей:

  1. раздельная компиляция помогает сократить время, затрачиваемое на компиляцию при внесении изменений в
    проект, за счёт чего ускоряется темп разработки;
  2. устраняется дублирование общих частей исходного кода, используемых в разных компонентах проекта (хотя
    этого можно добиться и включениями #include общих фрагментов, но это абсолютно разные
    способы реализации);
  3. упрощается внесение изменений в код и его сопровождение, а в итоге увеличивается «цельность» (consistency)
    проекта и сокращается число несоответствий при правках;

Библиотеки могут создаваться двумя альтернативными способами: как статические или как динамические
(разделяемые), и в большинстве случаев с равным успехом может быть выбран любой из этих вариантов.
Вся информация, представленная в последующих разделах, относится как к библиотекам, создаваемым
непосредственно в ходе разработки проекта, так и к 3rd party библиотекам, предоставляемым независимыми
разработчиками и используемыми в проекте. К 3rd party, кстати, относятся и многие библиотеки,
устанавливаемые с самой операционной системой Linux.

Компилируем мини-программу с анализом Coverage

Создайте файл и скопируйте или перепишите в него код:

Теперь откройте терминал в каталоге, где находится , и скомпилируйте программу одной командой:

Если компиляция не удалась, прочитайте текст ошибки и исправьте ошибку. Если всё в порядке, то в каталоге появится ещё два файла: исполняемый файл и файл , содержащий базовую информацию для запуска Code Coverage.

Теперь надо запустить программу, чтобы в процессе работы она записала информацию о фактическом покрытии кода на данном запуске. В UNIX и в Windows запуск выглядит по-разному:

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

Сравнение с Cygwin

MinGW является форком от Cygwin версии 1.3.3. Несмотря на то, что и Cygwin, и MinGW используются для портирования программного обеспечения Unix под Windows, они используют разный подход: цель Cygwin — предоставить полный слой POSIX, включающий в себя реализацию всех основных системных вызовов и библиотек системы UNIX, жертвуя производительностью там, где это необходимо для совместимости. Целью MinGW является предоставление нативной функциональности и производительности посредством прямых вызовов Windows API. В отличие от Cygwin, MinGW не нуждается в DLL-слое совместимости и, таким образом, программы не обязаны распространяться с исходным кодом. Программы под Windows, написанные с Cygwin, должны запускаться поверх копилефтной библиотеки совместимости, которая должна распространяться с программой, а также с исходным кодом программы.

Вследствие того, что MinGW использует вызовы Win32 API, он не может предоставить полного POSIX API; он не может скомпилировать некоторые приложения Unix, которые могут быть скомпилированы с Cygwin. В частности, это относится к приложениям, которые требуют такой функциональности POSIX, как , или и предполагают запуск в среде POSIX. Приложения, написанные с использованием кроссплатформенных библиотек, таких, как SDL, wxWidgets, Qt или GTK+, как правило, легче компилируются в MinGW, чем в Cygwin.

Комбинация MinGW и MSYS предоставляет небольшую независимую среду, которая может быть загружена на съемные носители, не требуя добавления записей в файлы реестра. Cygwin, предоставляя бо́льшую функциональность, является более сложным для установки и поддержки.

Также возможна кросс-компиляция приложений Microsoft Windows с MinGW-GCC под управлением операционных систем семейства POSIX. Это означает, что разработчику не нужно устанавливать Windows с MSYS, чтобы скомпилировать программы, которые будут запускаться под Microsoft Windows без Cygwin.

Обзор

Начало GCC было положено Ричардом Столлманом, который реализовал первый вариант GCC в 1985 году на нестандартном и непереносимом диалекте языка Паскаль; позднее компилятор был переписан на языке Си Леонардом Тауэром (англ. Leonard H. Tower Jr.) и Ричардом Столлманом и выпущен в 1987 году как компилятор для проекта GNU, который сам по себе являлся свободным программным обеспечением. Разработка GCC курируется Free Software Foundation.

В настоящее время GCC поддерживается группой программистов со всего мира. GCC является лидером по количеству процессоров и операционных систем, которые он поддерживает.

Будучи официальным компилятором системы GNU, GCC также является главным компилятором для сборки ряда других операционных систем; среди них — различные варианты Linux и BSD, а также ReactOS, Mac OS X, OpenSolaris, NeXTSTEP, BeOS и Haiku.

GCC часто выбирается для разработки программного обеспечения, которое должно работать на большом числе различных аппаратных платформ. Различия между «родными» для каждой из аппаратных платформ компиляторами приводят к трудностям при разработке кода, который бы корректно компилировался разными компиляторами, а кроме того, при использовании различных компиляторов сильно усложняются сборочные скрипты, которые должны собирать ПО для всех аппаратных платформ. При использовании GCC для компиляции кода под разные платформы будет использован один и тот же синтаксический анализатор. Поэтому если удалось собрать программу для одной из целевых платформ, то велика вероятность, что программа нормально соберётся и для других платформ.

3.1 Конфигурации Поддерживаемые GNU CC

Ниже перечислены возможный типы центральных процессоров:

Имя компании имеет значение только для разрешения
неоднозначностей, когда остальной указанной информации недостаточно.
Вы можете опускать его, записывая только `процессор-система’, если оно
не необходимо. Например, `vax-ultrix4.2′ эквивалентно
`vax-dec-ultrix4.2′.

Ниже расположен список типов систем:

Вы можете опустить тип системы, тогда `configure’ догадывается об
операционной системе из процессора и компании.

Вы можете добавлять номер версии к типу системы; это может или не
может давать различие. Например, вы можете писать `bsd4.3′ или
`bsd4.4′, чтобы отличать версии BSD. Практически, номер версии
наиболее необходим для `sysv3′ и `sysv4′, которые часто обрабатываются
по-разному.

Если вы определяете невозможную комбинацию типа `i860-dg-vms’, вы
можете получить сообщение об ошибке от `configure’, или же он может
игнорировать часть информации и сделать лучшее, что возможно с
остальным. `configure’ всегда печатает каноническиое имя для варианта,
который он использовал. GNU CC не обеспечивает все возможные варианты.

Часто индивидуальная модель машины имеет имя. Многие машинные
имена распознаются как псевдонимы для комбинаций процессор/компания.
Имеется таблица известных машинных имен:

Таким образом, если вы указываете `m68k-local’, конфигурация
использует файлы `m68k.md’, `local.h’, `m68k.c’, `xm-local.h’,
`t-local’ и `x-local’, все в каталоге `config/m68k’.

Редактор свойствProperty Editor

Редактор свойств можно использовать для изменения некоторых строковых свойств и выбора макросов в качестве значений.You can use the Property Editor to modify certain string properties and select macros as values. Чтобы открыть редактор свойств, выберите свойство на странице свойств, а затем нажмите кнопку со стрелкой вниз справа.To access the Property Editor, select a property on a property page and then choose the down arrow button on the right. Если раскрывающийся список содержит команду , можно выбрать ее, чтобы открыть редактор свойств для данного свойства.If the drop-down list contains , then you can choose it to display the Property Editor for that property.

В редакторе свойств можно нажать кнопку Макросы, чтобы просмотреть доступные макросы и их текущие значения.In the Property Editor, you can choose the Macros button to view the available macros and their current values. На следующем рисунке показан редактор свойств для свойства Дополнительные каталоги включаемых файлов после нажатия кнопки Макросы.The following illustration shows the Property Editor for the Additional Include Directories property after the Macros button was chosen. Если вы добавляете новое значение, когда установлен флажок Наследовать от родителя или от значений по умолчанию для проекта, оно добавляется ко всем значениям, которые в данный момент наследуются.When the Inherit from parent or project defaults check box is selected and you add a new value, it is appended to any values that are currently being inherited. Если снять флажок, новое значение заменяет наследуемые значения.If you clear the check box, your new value replaces the inherited values. В большинстве случаев следует не снимать этот флажок.In most cases, leave the check box selected.

Установка

Сборка Mingw в Windows своими руками

Зачем собирать mingw самому?

  • Для того, чтобы сконфигурировать компоненты так как нужно мне, а не той тысяче пользователей, которые скачивают стандартный пакет с официального сайта.
  • Чтобы я сам определял какие компоненты мне нужны в виде shared библиотек с dll-ками, а какие я линкую статически.
  • Чтобы быть уверенным, что gcc работает максимально эффективно.
  • Чтобы исключить возможные закладки в исполняемые модули.
  • Чтобы лучше понять как собираются и устанавливаются GNU утилиты.

Для сборки mingw нужен сам mingw. Существует программа установки, которая сама скачает и установит нужные пакеты. Она лежит на официальном сайте

Далее используем данную инструкцию, для дальнейшей установки и настройки:

Применение свойств к конфигурациям сборок и целевым платформамApplying properties to build configurations and target platforms

Некоторые свойства, такие как имя приложения, применяются ко всем вариантам сборки, независимо от целевой платформы и того, предназначена ли эта сборка для отладки или выпуска.Some properties, such as the application name, apply to all build variations, regardless of the target platform or whether it is a debug or release build. Однако большинство свойств зависит от конфигурации.But most properties are configuration-dependent. Это вызвано тем, что компилятор должен знать, на какой именно платформе будет запускаться программа и какие именно параметры компилятора нужно использовать для создания правильного кода.This is because the compiler has to know what specific platform the program will run on and what specific compiler options to use in order to generate the correct code

Таким образом, при установке свойства важно следить за тем, для какой конфигурации и платформы должно применяться новое значение.Therefore, when you set a property, it is important to pay attention to which configuration and platform the new value should apply to. Нужно ли применить его только для сборок отладки Win32 либо еще и для сборок отладки ARM и отладки x64?Should it apply only to Debug Win32 builds, or should it also apply to Debug ARM and Debug x64? Например, свойство Оптимизации по умолчанию имеет значение Наибольшая скорость (/O2) в конфигурации выпуска, но отключено в конфигурации отладки.For example, the Optimization property, by default, is set to Maximize Speed (/O2) in a Release configuration, but is disabled in the Debug configuration

Страницы свойств разработаны таким образом, чтобы вы всегда могли просмотреть и при необходимости изменить конфигурацию и платформу, к которым относится значение свойства.The property pages are designed so that you can always see, and if necessary modify, which configuration and platform a property value should apply to. На следующем рисунке показаны страницы свойств со сведениями о конфигурации и платформе в расположенных сверху списках.The following illustration shows the property pages with the configuration and platform information in the list boxes at the top. Когда свойство Оптимизация задано здесь, оно применяется только к сборкам отладки Win32, что является активной конфигурацией, как показано красными стрелками.When the Optimization property is set here, it will apply only to Debug Win32 builds, which happens to be the active configuration, as shown by the red arrows.

На следующем рисунке показана та же страница свойств проекта, но конфигурация изменена на выпуск.The following illustration shows the same project property page, but the configuration has been changed to Release

Обратите внимание на другое значение для свойства «Оптимизация».Note the different value for the Optimization property. Кроме того, обратите внимание, что активной конфигурацией по-прежнему является отладка.Also note that the active configuration is still Debug

Здесь вы можете задать свойства для любой конфигурации, а не только активной.You can set properties for any configuration here; it doesn’t have to be the active one.

Версии

Версия Дата выхода
7,1 2017-05-02
6,3 2016-12-21
6,2 2016-08-22
5,4 2016-06-03
6,1 2016-04-27
5,3 2015-12-04
5,2 2015-07-16
5,1 2015-04-22
4,9 2014-04-22
4,8 2013-03-22
4,7 2012-03-22
4,6 2011-03-25
4.5 2010-04-14
4,4 2009-04-21
4,3 2008-03-05
4,2 2007-05-13
4,1 2006-02-28
4,0 2005-04-20
3,4 2004-04-18
3,3 2003-05-13
3,2 2002-08-14
3,1 2002-05-15
3.0 2001-06-18
2,95 1999-07-31
2,8 1998-01-07
2,7 1995-06-16
2,6 1994-07-14
2.5 1993-10-22
2,4 1993-05-17
2,3 1992-10-31
2,2 1992-06-08
2,1 1992-03-24
2,0 1992-02-22
1,42 1992-09-20
1,41 1992-07-13
1,40 1991-06-01
1,39 1991-01-16
1,38 1990-12-21
1,37 1990-02-11
1,36 1989-09-24
1,35 1989-04-26
1,34 1989-02-23
1,33 1989-02-01
1,32 1988-12-21
1,31 1988-11-19
1,30 1988-10-13
1,29 1988-10-06
1,28 1988-09-14
1,27 1988-09-05
1,26 1988-08-18
1,25 1988-08-03
1,24 1988-07-02
1,23 1988-06-26
1,22 1988-05-22
1,21 1988-05-01
1,20 1988-04-19
1,19 1988-03-29
1,18 1988-02-04
1,17 1988-01-09
1,16 1987-12-19
1,15 1987-11-28
1,14 1987-11-06
1,13 1987-10-12
1,12 1987-10-03
1,11 1987-09-05
1,10 1987-08-22
1,9 1987-08-18
1,8 1987-08-10
1,7 1987-07-21
1,6 1987-07-02
1,5 1987-06-18
1.4 1987-06-13
1,3 1987-06-10
1.2 1987-06-01
1,1 1987-05-24
1,0 1987-05-23
0.9 1987-03-22

Заключение

В этой статье мы рассмотрели нововведения в классическом языке С, связанные с поддержкой компилятора
GCC и новых типов данных. В следующей статье мы рассмотрим особенности языка, связанные с точностью
вещественных вычислений и работой с данными в кодировке UNICODE.

Похожие темы

  • Малоизвестные возможности и нововведения в языке C. Часть 2. Точность вычислений и локализация в приложениях на языке С.
  • Брайан У. Керниган, Деннис М. Ритчи : Язык программирования C.
  • А. Гриффитс, «GCC. Полное руководство. Platinum Edition», М.: «ДиаСофт», 2004, ISBN 966-7992-33-0, стр. 624
  • GCC-Inline-Assembly-HOWTO
  • Зубков С.В. : Assembler для DOS, Windows, UNIX, «Питер», 2004, ISBN: 5-94074-259-9 , стр.608.
  • О.Цилюрик: Разработка модулей ядра Linux: Часть 15. Ассемблерные возможности компилятора GCC.
  • C99
  • Дж.Форсайт, М.Малькольм, К.Моулер : Машинные методы математических вычислений, М.: Мир, 1980
  • У. Ричард Стивенc, Стивен А. Раго: UNIX. Профессиональное программирование, 3-е издание, СПб.: «Символ-Плюс», 2013, ISBN: 978-5-93286-216-2, 1104 стр.

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

Подпишите меня на уведомления к комментариям

Ссылка на основную публикацию