- •Предисловие
- •Библиографический список
- •Контрольные вопросы
- •Библиографический список
- •Тема 2 Переменные и базовые типы данных языка с
- •Контрольные вопросы
- •Библиографический список
- •Тема3 Организация циклов в языке с
- •Контрольные вопросы
- •Библиографический список
- •Тема 4 Принятие решений. Условные операторы в языке с
- •Контрольные вопросы
- •Библиографический список
- •Тема 5 Числовые массивы в языке программирования с
- •Тип имя_массива[размер];
- •Тип имя_массива[размер1] [размер2];
- •Тип имя_массива[размер1] [размер2] [размерN];
- •Контрольные вопросы
- •Библиографический список
- •Тема 6 Символьные массивы в языке с. Работа со строками
- •Тип имя_массива[размер];
- •Тип имя_массива[размер1] [размер2];
- •Тип имя_массива[размер1] [размер2] [размерN];
- •Контрольные вопросы
- •Библиографический список
- •Тема 7 Указатели в языке программирования с
- •Int *ptr; // объявили указатель на целую переменную
- •Контрольные вопросы
- •Библиографический список
- •Тема 8 Указатели и массивы в языке с
- •Int data[7]; // обычный массив
- •Int *pd[7]; // массив указателей
- •Контрольные вопросы
- •Библиографический список
- •Тема 9 Динамическое распределение памяти в языке с
- •If (!ptr) // условие логического отрицания
- •If (!ptr) // условие логического отрицания
- •Контрольные вопросы
- •Библиографический список
- •Тема 10 Функции Общие сведения о функциях языка с
- •Fun(тип имя_перем1, тип имя_перем2, , тип имя_перем n)
- •Контрольные вопросы
- •Библиографический список
- •Тема 11 Указатели и функции в языке программирования с
- •Тип_возвращаемый_функцией(*имя_указателя_на_функцию)(аргументы);
- •Контрольные вопросы
- •Библиографический список
- •Тема 12 Файловый ввод/вывод в языке с
- •Контрольные вопросы
- •Библиографический список
- •Тема 13 Структуры – производные типы данных языка с
- •Int age; // возраст
- •Int age; // возраст
- •Int age; // возраст
- •Int age; // возраст
- •Int age; // возраст
- •Int age; // возраст
- •Контрольные вопросы
- •Библиографический список
- •Тема 14 Объединения и перечислимые типы в языке с
- •Контрольные вопросы
- •Библиографический список
- •Тема 15 Структуры и функции языка с
- •Контрольные вопросы
- •Библиографический список
- •Тема 16 Операции с разрядами (битами) в языке с
- •Контрольные вопросы
- •Библиографический список
- •Тема 17 Программы, состоящие из нескольких файлов, на языке с
- •Спецификатор extern
- •Спецификатор static
- •Спецификатор register
- •Спецификатор auto
- •Контрольные вопросы
- •Библиографический список
- •Тема 18 Рекурсивные алгоритмы и функции
- •Переместить (a, b);
- •Контрольные вопросы
- •Библиографический список
- •Тема 19 Препроцессор языка с
- •Директива #define
- •Директива #error
- •Директива #include
- •Директивы условной компиляции
- •2_ Я_последовательность операторов программного кода
- •3_ Я_последовательность операторов программного кода
- •Директива #line
- •Директива#pragma
- •Предопределенные символические константы
- •Макрос подтвержденияassert
- •Контрольные вопросы
- •Библиографический список
- •Тема 20 Программы на языке с при использовании статически подключаемой библиотеки
- •Контрольные вопросы
- •Библиографический список
- •Тема 21 Использование аргументов командной строки в с
- •Контрольные вопросы
- •Контрольная работа № 2 Покупки в супермаркете
- •Приложение Управление конфигурациями проекта в Visual Studio 2010
Приложение Управление конфигурациями проекта в Visual Studio 2010
Любой проект в VisualStudio2010 включает несколько самостоятельных конфигураций для компиляции разных версий программы. Конфигурацией называется набор параметров компилятора, компоновщика и библиотекаря, используемый при построении проекта. По умолчанию при создании проекта средаVisualStudio2010 автоматически включает в него две конфигурации:Debug(отладочную) иRelease(финальную). Как следует из их названий, отладочная конфигурация используется в процессе написания программы, ее тестовых запусков для обнаружения и исправления ошибок, финальная – для построения конечной версии продукта, передаваемого заказчику для промышленного использования.
При создании проекта настройки отладочной (Debug) и финальной (Release) конфигураций устанавливаются в значения по умолчанию. С этими настройками выполняются следующие действия.
Debug конфигурация компилируется с включением полной символьной отладочной информации и выключением оптимизации. Оптимизация кода затрудняет процесс отладки, так как усложняет или даже полностью изменяет отношение между строками исходного кода программы и сгенерированными машинными инструкциями. Такая отладочная информация используется отладчиком Visual Studio 2010 для отображения значений переменных, определения текущей выполняемой строки программы, отображения стека вызовов и так далее, т. е. для поддержки стандартных действий, выполняемых при отладке программы.
Release конфигурация не содержит никакой отладочной информации и подвергается полной оптимизации. Без отладочной информации процесс отладки программы очень затруднен. Однако при необходимости такая информация может быть создана для финальной версии программы и записана в отдельный файл с расширением .pdb. Файлы отладочной информации .pdb могут оказаться очень полезными, если позднее возникнет необходимость в отладке финальной версии программы, например при обнаружении критических ошибок в процессе ее эксплуатации на компьютерах заказчика. Файлы .pdb обычно заказчику не передаются, а сохраняются у разработчиков.
Переключение между конфигурациями можно осуществлять из панели инструментов или при помощи окна ConfigurationManager(менеджер конфигураций). Для быстрого переключения конфигурации, используемой для компиляции проекта, используется стандартная панель инструментов (рис. П1).
Рис. П1. Переключение конфигураций из панели инструментов
Программист может в любой момент изменить настройки конфигурации проекта или, при необходимости, создать новую конфигурацию. Эти действия выполняются в окне свойств проекта. Настройки свойств проекта применяются к текущей конфигурации. Можно указать одну из созданных конфигураций проекта или выбрать Allconfigurations, в последнем случае настройки будут применены ко всем конфигурациям одновременно. Рассмотрим основные отличия в настройках проекта для отладочной и финальной конфигураций. На рис. П2 изображено окно свойств проекта со страницей настроек оптимизации (Optimization) для отладочной конфигурации проекта. Видно, что оптимизация генерируемого машинного кода выключена (Disabled).
Рис. П2. Страница свойств Optimizationдля отладочной конфигурации
Для финальной версии проекта по умолчанию включена оптимизация по скорости выполнения программы (OptimizeSpeed). На рис. П3 показана страница с выбранными настройками финальной конфигурации.
Рис. П3. Страница свойств Optimizationдля финальной конфигурации
Кроме того, можно также выбрать следующие параметры оптимизации – генерировать компактный код (MinimizeSize) и полную оптимизацию (FullOptimization), которая включает настройки оптимизации. На рис. П4 показан список свойств закладкиOptimization.
Рис. П4. Список свойств закладки Optimization
На странице свойств генерации кода (CodeGeneration) можно указать версию стандартной библиотеки языкаC, которая будет использована при компиляции и компоновке проекта – настройкаRuntimeLibrary. Для отладочной конфигурации по умолчанию используется настройкаMulti-threadedDebugDLL(многопоточная отладочная версия стандартной библиотеки, размещенной в динамически загружаемом модулеDLL). Эта версия библиотеки содержит отладочную информацию, также поддерживает дополнительные проверки времени выполнения, что позволяет, с одной стороны, выполнять функции стандартной библиотеки под управлением отладчика, а с другой – находить на раннем этапе труднообнаруживаемые проблемы, такие как выход за границы массивов, неправильная работа с динамически распределяемой памятью и некоторые другие. Из-за наличия этих дополнительных проверок отладочная версия библиотеки выполняется медленнее финальной.
Для финальной версии проекта по умолчанию используется настройка Multi-threadedDLL(финальная версия стандартной библиотеки без отладочной информации, размещенной в динамически загружаемом модулеDLL). Важно помнить, что для запуска этой версии при компиляции ее с такими настройками модульDLLстандартной библиотеки должен присутствовать в системе. Его следует предусмотреть либо при установкиVisualStudio2010, либо при помощи отдельного инсталляционного пакета Microsoft Visual C++ 2010 Redistributable Package (x86). Если же библиотекаDLLв системе нет, то скомпилированная программа не будет запущена.
Для исключения зависимости от отдельной DLLстандартной библиотеки значение настройкиRuntimeLibraryнужно установить вMulti-threaded(многопоточная версия стандартной библиотеки). В этом случае весь необходимый функционал будет включен непосредственно в результирующий .exeфайл, который может быть запущен и исполнен независимо от того, были ли установлены файлыDLLстандартной библиотеки или нет.
На рис. П5 показана страница свойств закладки CodeGenerationдля отладочной конфигурации.
Рис. П5. Страница свойств CodeGenerationдля отладочной конфигурации
На рис. П6 показана страница свойств закладки CodeGenerationдля финальной конфигурации.
Рис. П6. Страница свойств CodeGenerationдля финальной конфигурации
Отладочная и финальная версии программы компилируются также с различными символами препроцессора. Для отладочной версии объявляется символ _DEBUG, а для финальной –NDEBUG. Это позволяет применять директивы препроцессора для условной компиляции программы, включая или исключая некоторую функциональность в одну из версий. Обычно это используется для включения дополнительных проверок и отладочного вывода в отладочную версию программы. Для финальной версии такие проверки и вывод не нужны, поэтому они в нее не включаются. Например, в следующем фрагменте программы значение переменнойresбудет выведено на экран только в отладочной версии:
int a, b;
int res;
a = 10;
b = 20;
res = a + b;
#ifdef _DEBUG
printf ("res = %d", res);
#endif
На рис. П7 представлена страница свойствPreprocessorдля отладочной конфигурации, на рис. П8 для финальной.
Рис. П7. Страница свойств Preprocessorдля отладочной конфигурации
Рис. П8. Страница свойств Preprocessorдля финальной конфигурации
В отладочной и финальной версиях также различаются форматы отладочной информации (DebugInformationFormat), генерируемой компилятором и сохраняемой в .pdbфайле.
Для отладочной версии используется ProgramDatabaseforEditandContinue, позволяющая отлаживать и даже изменять программу, если сработала точка останова. При возобновлении выполнения программы внесенные изменения будут автоматически применены, и выполнение продолжится уже с ними. Эта возможность позволяет сократить время, необходимое на остановку и перекомпиляцию программы при нахождении и исправлении ошибок. В то же время такая настройка несовместима с настройками оптимизации, поэтому может быть использована только в отладочной версии. На рис. П9 показана страница свойствGeneralдля отладочной конфигурации.
Рис. П9. Страница свойств Generalдля отладочной конфигурации
В финальной версии применяется настройка ProgramDatabase. Она включает генерацию .pdbфайла, который может быть полезен при необходимости поиска ошибок в финальной версии продукта. Эта настройка никак не влияет на оптимизацию генерируемого кода, поэтому она может быть использована для финальной версии.
На рис. П10 показана страница свойств Generalдля финальной конфигурации.
Рис. П10. Страница свойств Generalдля финальной конфигурации
На странице свойств Debugging(отладка) узлаLinkerнастройка Generate Debug Info (генерировать отладочную информацию) управляет генерацией отладочной информации, настройкаGenerateProgramDatabaseFile(создавать файл с отладочной информацией для программы) задает имя результирующего .pdbфайла с отладочной информацией.
На рис. П11 показана страница свойств DebuggingузлаLinkerдля отладочной версии.
Рис. П11. Страница свойств Debuggingдля отладочной версии
MSVisualStudio2010 предоставляет удобные и гибкие механизмы настройки свойств конфигураций проектов, что позволяет программистам выполнять компиляцию и сборку своих проектов с актуальным набором настроек.
Содержание
Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
3 |
Тема 1.Знакомство со средойMicrosoftVisual Studio 2010 и настройка компилятора языка С. Стандартный ввод-вывод . . . . . . . . . |
5 |
Тема 2.Переменные и базовые типы данных языка С . . . . . . . . . . . . . . . . |
27 |
Тема 3.Организация циклов в языке С . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
42 |
Тема 4.Принятие решений. Условные операторы в языке С . . . . . . . . . . . |
57 |
Тема 5.Числовые массивы в языке программирования С . . . . . . . . . . . . |
76 |
Тема 6.Символьные массивы в языке С. Работа со строками . . . . . . . . . |
93 |
Тема 7.Указатели в языке программирования С . . . . . . . . . . . . . . . . . . . . |
110 |
Тема 8.Указатели и массивы в языке С . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
124 |
Тема 9.Динамическое распределение памяти в языке С . . . . . . . . . . . . . . |
143 |
Тема 10. Функции. Общие сведения о функциях языка С . . . . . . . . . . . . . |
155 |
Тема 11.Указатели и функции в языке программирования С . . . . . . . . . . |
175 |
Тема 12.Файловый ввод/вывод в языке С . . . . . . . . . . . . . . . . . . . . . . . . . . |
191 |
Тема 13.Структуры – производные типы данных языка С . . . . . . . . . . . . |
216 |
Тема 14.Объединения и перечислимые типы в языке С . . . . . . . . . . . . . . |
233 |
Тема 15.Структуры и функции языка С . . . . . . . . . . . . . . . . . . . . . . . . . . . |
246 |
Тема 16.Операции с разрядами (битами) в языке С . . . . . . . . . . . . . . . . . . |
266 |
Тема 17.Программы, состоящие из нескольких файлов, на языке С…. . . |
292 |
Тема 18.Рекурсивные алгоритмы и функции . . . . . . . . . . . . . . . . . . . . . . . |
318 |
Тема 19.Препроцессор языка С . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
343 |
Тема 20.Программы на языке С при использовании статически подключаемой библиотеки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
361 |
Тема 21.Использование аргументов командной строки в С . . . . . . . . . . . |
389 |
Контрольная работа №1.Вычисление последовательности Фибоначчи с использованием больших чисел . . . . . . . . . . . . . . . . . . . . . . |
402 |
Контрольная работа №2.Покупки в супермаркете . . . . . . . . . . . . . . . . . |
407 |
Приложение.Управление конфигурациями проекта в VisualStudio2010 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
413 |