Как на языке си запустить программу

32 Компилятор gcc и g++ для программирования на языке Си: запуск кода

Сразу хочу сказать, что здесь никакой воды про компилятор gcc, и только нужная информация. Для того чтобы лучше понимать что такое компилятор gcc, g++ для программирования на языке си, запуск кода , настоятельно рекомендую прочитать все из категории Операционная система LINUX. Компилятор g++ распространяется по лицензии GNU, Фондом свободного программного обеспечения (FSF), для nix-подобных ОС и является C++ компилятором, который управляется с помощью командной строки. g++ распространяется с nix системами, так что если вы работаете в ОС Unix или Linux, скорее всего в вашей системе уже установлен g++.
Чтобы запустить исходный код, с помощью компилятора g++, просто введите в терминале (командной строке) следующую команду:

g++ filename

После того, как исходный файл будет скомпилирован в исполняемый, на выходе мы получим файл с именем a и расширением .out — a.out .

Урок 1: Компиляция и запуск простейшей программы на языке Си.


Перед запуском g++ можно указать в командной строке имя исполняемого файла, который получим на выходе. Для этого необходимо указать параметр -o и присвоить нужное имя файла.

-o outputfile
Полностью команда будет выглядеть так:
g++ filename -o outputfile

Чтобы g++ показывал предупреждения об ошибках, а также поддерживал существующие стандарты языка C++, рекомендую использовать флаги:

Если вы хотите, чтобы компилятор рассматривал предупреждения как ошибки, — используйте флаг -Werror . И если появится хотя-бы одно предупреждение, то вы даже не получите исполняемый файл. Таким образом, вы точно будете знать, что не пропустили ни одной ошибки. Если вы хотите, отлаживать исполняемый файл в отладчике GDB, включайте в команду флаг -g .

g++ filename -g -o outputfile

Это позволит отладчику GDB, дать вам подробную информацию о процессе отладки, в том числе дополнительный код в исполняемый файл. Если вы используете *nix-подобные системы, вы также можете проверить другие опции компилятора g++, введя в командную строку следующую команду:

Создание разделяемых библиотек

32 Компилятор gcc и g++ для программирования на языке Си: запуск кода

Если вы хотите узнать, как создать общую библиотеку на Linux с gсс, прочитайте статью — как создать общую библиотеку на Linux с помощью gcc. компилятор gcc распространяется по лицензии GNU, Фондом свободного программного обеспечения, для nix-подобных ОС и является CC++ компилятором, который управляется с помощью командной строки. gcc распространяется с nix системами, так что если вы работаете в ОС Unix или Linux, скорее всего в вашей системе уже установлен gcc.
Чтобы запустить исходный код, с помощью компилятора gcc, просто введите в терминале (командной строке) следующую команду:

gcc filename

После того, как исходный файл будет скомпилирован в исполняемый, на выходе мы получим файл с именем a и расширением *.out — a.out , который можно будет запустить с помощью команды

Как создать проект на языке си в Microsoft Visual Studio?

Перед запуском gcc можно указать в командной строке имя исполняемого файла, который получим на выходе. Для этого необходимо установить параметр -o и присвоить нужное имя файла.

-o outputfile
Полностью команда будет выглядеть так:
gcc filename -o outputfile

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

Чтобы быть уверенными, что компилятор действительно поддерживает стандарты ANSI, используем флаг:

Вы можете прочитать больше о значении предупреждений компилятора. Если вы хотите, чтобы компилятор рассматривал предупреждения как ошибки, используйте флаг -Werror . В таком случае, если возникнет хотя бы одно предупреждение, вы не получите исполняемый файл. Если вы хотите, отлаживать исполняемый файл в отладчике GDB, включайте в команду флаг -g .

gcc filename -g -o outputfile

Это позволит отладчику GDB, дать вам подробную информацию о процессе отладки, в том числе дополнительный код в исполняемый файл.

Математическая библиотека

Если вам нужно использовать функции из математической библиотеки (как правило, функции из заголовочного файла math.h , таких как sin или sqrt ), необходимо явно указать этот файл. Чтобы привязать библиотеку используется флаг -l , после указывается флаг библиотеки m :

gcc filename -o outputfile -lm

Обратите внимание, что в C++ не надо использовать этот флаг.
Если вы используете *nix-подобные системы, вы также можете проверить другие опции компилятора gcc, введя в командную строку следующую команду:

руководство (на английском) к компилятору gcc, или
руководство (на русском) к компилятору gcc.

Создание разделяемых библиотек

Если вы хотите узнать, как создать разделяемую библиотеку в Linux с gcc, прочитайте статью: как создать разделяемую библиотеку на Linux с помощью gcc.

Исправление ошибок компиляции — процесс компиляции

Это ваша первая программа на C (или C++) — она не такая уж большая, и вы собираетесь скомпилировать ее. Вы нажимаете на compile (или вводите команду компиляции) и ждете. Ваш компилятор выдает пятьдесят строк текста. Вы выбираете слова warning и error . Задумываетесь, значит ли это, что все в порядке. Вы ищите полученный исполняемый файл.

Ничего. Черт возьми, думаете вы, я должен выяснить, что все это значит …

Типы ошибок компиляции

  • предупреждения компилятора;
  • ошибки компилятора;
  • ошибки компоновщика.

32 Компилятор gcc и g++ для программирования на языке Си: запуск кода

Хоть вы и не хотите игнорировать их, предупреждения компилятора не являются чем-то достаточно серьезным, чтобы не скомпилировать вашу программу. Прочитайте следующую статью, которая расскажет вам, почему стоит дружить с компилятором и его предупреждениями. Как правило, предупреждения компилятора — это признак того, что что-то может пойти не так во время выполнения.

Как компилятор узнает об этом? Вы, должно быть делали типичные ошибки, о которых компилятор знает. Типичный пример — использование оператора присваивания = вместо оператора равенства == внутри выражения. Ваш компилятор также может предупредить вас об использовании переменных, которые не были инициализированы и других подобных ошибках. Как правило, вы можете установить уровень предупреждений вашего компилятора — я устанавливаю его на самый высокий уровень, так что предупреждения компилятора не превращаются в ошибки в выполняемой программе (“ошибки выполнения”).

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

Читайте также:
Как пользоваться программой зум на ноутбуке

Ошибки — это условия, которые препятствуют завершению компиляции ваших файлов.

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

line 13, unexpected parenthesis ‘)’

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

Даже если вы прошли процесс компиляции успешно, вы можете столкнуться с ошибками компоновщика. Ошибки компоновщика, в отличие от ошибок компилятора, не имеют ничего общего с неправильным синтаксисом. Вместо этого, ошибки компоновщика — это, как правило, проблемы с поиском определения функций, структур, классов или глобальных переменных, которые были объявлены, но не определены, в файле исходного кода. Как правило, эти ошибки будут иметь вид:

could not find definition for X

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

Ошибки компилятора — с чего начать?

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

Одна ошибка в верхней части вашей программы может вызвать целый ряд других ошибок компилятора, потому что эти строки могут рассчитывать на что-то в начале программы, что компилятор не смог понять. Например, если вы объявляете переменную с неправильным синтаксисом, компилятор сообщит о синтаксических ошибках, и что он не может найти объявление для переменной. Точка с запятой, поставленные не в том месте, могут привести к огромному количеству ошибок. Это происходит, потому что синтаксис C и C++ синтаксис позволяет объявить тип сразу же после его определения:

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

Что-то вроде этого:

struct MyStructType

может привести к огромному количеству ошибок, возможно, включая сообщения:

extraneous ‘int’ ignored

Все это из-за одного символа! Лучше всего начать с самого верха.

Анализ сообщения об ошибке

Большинство сообщений от компилятора будет состоять как минимум из четырех вещей:

  1. тип сообщения — предупреждение или ошибка;
  2. исходный файл, в котором появилась ошибка;
  3. строка ошибки;
  4. краткое описание того, что работает неправильно.

Вывод g++ для указанной выше программы может выглядеть следующим образом (ваши результаты могут отличаться, если вы используете другой компилятор):

foo.cc:7: error: semicolon missing after struct declaration

foo.cc это имя файла. 7 — номер строки, и ясно, что это ошибка. Короткое сообщение здесь весьма полезно, поскольку оно показывает именно то, что не правильно. Заметим, однако, что сообщение имеет смысл только в контексте программы. Оно не сообщает, в какой структуре не хватает запятой.

Более непонятным является другое сообщение об ошибке из той же попытки компиляции:

extraneous ‘int’ ignored

Программист должен выяснить, почему это произошло. Обратите внимание еще раз, что эта ошибка была вызвана проблемой в начале программы, не в строке 8, а раньше, когда в структуре не хватает точки с запятой. К счастью, понятно, что определение функции для foo было в порядке, это говорит нам о том, что ошибка должна быть где-то в другом месте программы. На самом деле, она должна быть в программе раньше — вы не будете получать сообщение об ошибке, которое указывает на синтаксическую ошибку до строки, на которой ошибка на самом деле произошла.

Это руководящий принцип вычисления ошибок компилятора: если сомневаетесь, посмотрите в программе раньше. Так как синтаксические ошибки могут позже иметь серьезные последствия, вполне возможно, что компилятор указывал номер строки, в которой на самом деле не было синтаксической ошибки!

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

Обработка непонятных или странных сообщений

Есть несколько особенно сложных типов ошибок компилятора. Первый — это необъявленная переменная, которую, как вам кажется, вы объявили. Часто, вы можете указать, где именно переменная была объявлена! Проблема в том, что часто переменная просто написана с ошибкой. К сожалению, это довольно трудно увидеть, так как обычно мы читаем то, что ожидаем, а не то, что есть на самом деле.

Кроме того, есть и другие причины, почему это может быть проблемой — например, проблемы с видимостью!

Чтобы разобраться в возможных проблемах, я делаю так: в строке, где находится якобы необъявленная переменная, надо выполнить поиск текстовым редактором слова под курсором (в качестве альтернативы можно скопировать имя переменной и выполнить поиск), и если я записал его неправильно, оно не найдется. Также не надо вводить имя переменной вручную, так как вы случайно можете ввести его правильно.

Второе непонятное сообщение:

unexpected end of file

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

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

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

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

Читайте также:
Структура рабочей области программы понятие рабочего листа книги

Ошибки компоновщика

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

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

undefined function

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

Ошибки компоновщика могут произойти в функциях, которые вы объявили и определили, если вы не включили все необходимые объектные файлы в процесс связывания. Например, если вы пишете определение класса в myClass.cpp , а ваша основная функция в myMain.cpp , компилятор создаст два объектных файла, myClass.o и myMain.o, а компоновщику будут нужны оба из них для завершения создания новой программы. Если оставить myClass.o , то у него не будет определения класса, даже если вы правильно включите myClass.h !

Иногда появляются незначительные ошибки, когда компоновщик сообщает о более чем одном определении для класса, функции или переменной. Эта проблема может появиться по нескольким причинам: во-первых, у объекта может быть два определения — например, две глобальные переменные объявлены как внешние переменные, чтобы быть доступными за пределами файла исходного кода.

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

Последний странный тип ошибки компоновщика — сообщение

undefined reference to main

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

Статью про компилятор gcc я написал специально для тебя. Если ты хотел бы внести свой вклад в развии теории и практики, ты можешь написать коммент или статью отправив на мою почту в разделе контакты. Этим ты поможешь другим читателям, ведь ты хочешь это сделать? Надеюсь, что теперь ты понял что такое компилятор gcc, g++ для программирования на языке си, запуск кода и для чего все это нужно, а если не понял, или есть замечания, то нестесняся пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Операционная система LINUX

Источник: intellect.icu

Как на языке си запустить программу

Интегрированная среда разработки программ на языке Си Для обучения программированию на Си достаточно установить на компьютер интегрированную среду разработки Turbo C версии 2 или 3. Turbo C (фирмы Borland) содержит в себе текстовый редактор для написания кода программы, отладчик и компилятор программы в коды микропроцессора.

Структура программы на языке Си
Всякая программа на Си начинается с директив препроцессора. Директива #include включает в текст программы содержимое указанного файла. Обычно подключаемый файл содержит прототипы библиотечных функций необходимых для работы программы на Си. Так, например файл stdio.h содержит функции ввода-вывода, а файл math.h наиболее распространённые математические функции. Директива #include записывается следующим образом: #include . Например, #include . Несколько директив include записываются в столбик с новой строки.
Так же, программисты на Си часто используют директивы #define и #undef. Директива #define служит для замены часто использующихся констант, ключевых слов, операторов или выражений некоторыми идентификаторами. Директива #undef отменяет действие директивы #define. Про директивы #define и #undef будет подробно рассказано в соответствующем разделе.
Далее, программа на Си должна содержать обязательную функцию main, с которой, собственно, и начинается выполнение программы. Сама программа может содержать любое количество функций и выражений внутри функции main. Если функция не возвращает никакого значения, то перед функцией пишется слово void. Всякая функция должна иметь параметры (значения для обработки), например функция sin(x) имеет параметр (аргумент) x — значение угла. Наша функция main не имеет аргументов, поэтому функция записывается с пустыми скобками — main(). Описание функции (тело) заключается в фигурные скобки <>. Скобка < — означает начало описания, а скобка >- конец.
Следует отметить, что язык Си очень чувствителен к регистру вводимых слов и символов. Так слова main и Main имеют совершенно разные значения.

Для возврата в редактор следует нажать клавишу Esc.
Может так случиться, что в тексте программы допущена ошибка, тогда компилятор выдаст сообщение об ошибке, которую нужно устранить.
Например:

Типы данных и их объявление
Для обработки различной информации (как числовой, так и символьной) в языке Си существуют предопределённые типы данных.
Целые типы данных
Наименование (тип) Диапазон значений Занимает памяти (бит)
int (целый) -32768 . 32767 16
long (длинный целый) -2147483648 . 2147483647 32
char (символьный) -128 . 127 8

unsigned — беззнаковый тип. Запись unsigned перед типом переменной будет означать, что эта переменная будет принимать только положительные значения, причём переменная может принимать большие положительные значения, чем переменная знакового типа. Например, unsigned int может принимать значения от 0 до 65535.

Вещественные типы данных
Наименование (тип) Диапазон значений Занимает памяти (бит)
float (вещественный) От +3.4е-38 до +3.4е+38 32
double (двойная точность) От +1.7е-308 до +1.7е+308 64

По умолчанию все объявленные данные являются величинами переменными. Если нужно объявить константу (неизменяемую величину), то перед типом следует написать слово const. В языке Си принято объявлять все переменные до начала программы. Объявление производится следующим образом: тип переменной имя переменной. Например:
int x;
double argx;
const float pi = 3.14;
Если в программе используется несколько переменных одного типа, то допустимо эти переменные перечислить через запятую. Например: int x,y,z;
Имена переменных программист придумывает сам. Это могут выть буквы или слова. Допустимо в именах переменных добавлять цифры, но цифры должны записываться только после букв. Например: int counter2; double x1;. Важно, чтобы имена переменных записывались английским шрифтом.
Напишем следующую программу, что бы разобраться с объявлением переменных:
#include
void main()
int q,x,z;
const float pi = 3.14;
clrscr();
z = 10;
q = 5;
x = z + q;
printf(«X= %dnPI= %f», x,pi);
>
В этой программе мы объявили три переменных q, x, z типа int. Так же объявили константу const float pi = 3.14 и присвоили ей значение 3.14.
Далее в программе мы присвоили переменным определённые значения z = 10, q = 5. Затем переменной x присвоили значение суммы переменных z и q, и наконец, вывели значение суммы и значение константы pi на экран при помощи функции printf.

Читайте также:
В какой программе можно чертить на компьютере

Функция вывода printf и форматирование вывода
Функция printf обладает уникальными свойствами, так как может выводить на экран не только надписи, но и числовые значения, причём, вывод может осуществляться в заданном формате.
Аргумент функции заключённый в двойные кавычки выводится непосредственно на экран, но может содержать специальные символы форматирования которые на экране не отображаются, а служат командами форматирования. Часть текста не заключённая в двойные кавычки является перечислением переменных и констант (записанных через запятую), значения которых нужно вывести на экран. Рассмотрим последовательно, что означают записи printf(«X= %dnPI= %f», x,pi). Запись в кавычках Х= выводится непосредственно на экран, далее запись %d означает, что значение переменной х должно отображаться на экране как целое число. Для числовых значений принято несколько записей которые следует использовать при выводе значений на экран:
Запись Типы выводимых значений
%d десятичное целое число
%f вещественное десятичное число с плавающей точкой
%u беззнаковое целое число
%e вещественное число в экспоненциальной форме
%o восьмеричное целое число
%x шестнадцатеричное целое число
%c символ
%s строка символов
%p указатель (адрес)

Далее, запись n означает, что продолжение строки следует перенести на следующую строку. В качестве символов форматирования текста зарезервировано несколько значений:
n — для перехода на новую строку;
a — для кратковременной подачи звукового сигнала;
b — для перевода курсора влево на одну позицию;
r — для перевода курсора в начало текущей строки;
t — для горизонтальной табуляции;
v — для вертикальной табуляции.
PI= выводится непосредственно на экран, %f указывает, что на экране следует отобразить значение константы pi в формате вещественного десятичного числа с плавающей точкой. И наконец, после закрывающих кавычек, через запятую перечислены переменная х и константа pi которые должны выводиться на экран. Попробуем заменить %f на %e и убедимся, что теперь константа pi отображается в экспоненциальном виде:

Источник: hi-intel.ru

C/C++ в Cygwin

dvsav.ru

Эта короткая заметка — о том, как начать программировать на языках C и C++ в среде Cygwin. Об установке Cygwin читайте тут.

Установка средств разработки

Чтобы начать программировать, вам понадобятся компиляторы соответствующих языков и отладчик; пригодится также утилита make. Поэтому запустите программу установки Cygwin (setup.exe) и в диалоге Select Packages выберите следующие пакеты из категории Devel:

  • gcc-core: GNU Compiler Collection (C, OpenMP)
  • gcc-g++: GNU Compiler Collection (C++)
  • gdb: The GNU debugger
  • make: The GNU version of the ‘make’ utility

Установите их, нажав кнопку Далее.

Создаем папки проектов

Я запустил Cygwin Terminal и создал в домашней директории две папки (clearning и cpplearning), куда буду помещать проекты на C и C++ соответственно:

mkdir clearning
mkdir cpplearning

В обеих папках я создал папку helloworld:

cd ~/clearning
mkdir helloworld
cd ~/cpplearning
mkdir helloworld

Пишем и компилируем программу на C

Я создаю в папке clearning/helloworld файл main.c:

cd ~/clearning/helloworld
touch main.c

Открываю main.c любым текстовым редактором и пишу в него следующий код:

int main ( )
{
printf ( «Hello, World!» ) ;
return 0 ;
}

gcc -o hello.exe main.c

В результате в папке появляется исполняемый файл hello.exe, который я могу запустить:

На экране я увижу строку Hello, World!
Подробную информацию об использовании компилятора gcc можно найти в книге Peter Prinz, Tony Crawford — C in a Nutshell The Definitive Reference, 2nd Edition — 2015 Chapter 19. Compiling with GCC.

Пишем и компилируем программу на C++

Я создаю в папке cpplearning/helloworld файл main.cpp:

cd ~/cpplearning/helloworld
touch main.cpp

Открываю main.cpp любым текстовым редактором и пишу в него следующий код:

g++ -o hello.exe main.cpp

В результате в папке появляется исполняемый файл hello.exe, который я могу запустить:

На экране я увижу строку Hello, World!

cygwin1.dll —> PATH

Программы, которые вы копилируете в cygiwin автоматически линкуются с библиотекой cygwin1.dll. Библиотека эта, согласно оф. сайту «provides substantial POSIX API functionality», т. е. заменяет вашей программе POSIX’ные системные вызовы. Из командной строки cygwin вы можете запустить свою программу без проблем, а вот скажем из проводника Windows или из командной строки cmd.exe у вас ее запустить просто так не получится — Windows не сможет найти библитеку cygwin1.dll, так как не знает где та лежит. Поэтому, чтобы все работало, добавьте путь к папке, где лежит cygwin1.dll (например у меня это C:cygwin64bin) в переменную окружения PATH.

Отладка

Чтобы можно было отладить программу, эта программа (ее исполняемый файл) должна содержать таблицу символов — информацию, которая позволяет сопоставить машинный код программы с ее исходным кодом на C или C++. Чтобы добавить в исполняемый файл таблицу символов, вы должны вызвать компилятор с ключом -g, например так:

gcc -g -o hello.exe main.c
g++ -g -o hello.exe main.cpp

Далее вы запускаете программу под управлением отладчика:

gdb hello.exe

Отладчик выводит на экран приглашение (gdb), после которого вы можете вводить различные команды, некоторые из которых перечислены в таблице ниже:

l b r s n p
Показать некоторое число строк исходного кода.
Установить точку останова на заданную строку исходного кода.
Выполнять программу пока не встретится точка останова.
Выполнить шаг с заходом.
Выполнить шаг с обходом.
Вывести на экран заданное выражение.

Подробнее об отладке при помощи gdb можно почитать в книге Peter Prinz, Tony Crawford — C in a Nutshell The Definitive Reference, 2nd Edition — 2015 Chapter 21. Debugging C Programs with GDB.

Источник: dvsav.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru