Форум программистов, компьютерный форум CyberForum.ru

файлы stdafx - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 44, средняя оценка - 4.93
nutius
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 60
20.10.2012, 22:24     файлы stdafx #1
Здравствуйте, форумчане!

Подскажите, пожалуйста, зачем нужны файлы stdafx? почему в начале создания консольного приложения иногда появляются файлы stdafx.h в папке с заголовочными файлами и stdafx.cpp в Source files папке...а иногда они не создаются?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2012, 22:24     файлы stdafx
Посмотрите здесь:

stdafx.h: No such file or directory C++
Что такое stdafx.h и как это отключить? C++
C++ iostream, StdAfx.h
C++ stdafx.h и StdAfx.h
библиотека stdafx.h на MAC OS, что делать?:) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений89
 Аватар для Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
20.10.2012, 22:29     файлы stdafx #2
нный подключаемый файл не относится к стандартной библиотеке. Самый простой способ выяснить содержимое данного подключаемого файла в вашем проекте -- открыть его и посмотреть.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
20.10.2012, 23:40     файлы stdafx #3
Ну хоть кто-то задался этим вопросом, а не слепо копипастит код :)

Смотрите, .h-файлы это хедеры. То есть там вроде как должны быть определения типов данных, структуры классов и т. п. А код по идее должен быть только в .cpp-файлах.

Хедеры подключаются в файлы — то есть прямиком вставляются в исходник во время компиляции.

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

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

Конкретно Visual Studio это делает с помощью этого самого stdafx. Все инклюды, что идут перед #include "stdafx.h", выносятся в этот отдельный файл, компилируются там, а интерфейс к этом файлу запихивается в этот самый stdafx.h, чтобы остальная часть исходника ни о чём не подозревала.
nutius
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 60
21.10.2012, 01:25  [ТС]     файлы stdafx #4
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Ну хоть кто-то задался этим вопросом, а не слепо копипастит код :)

Смотрите, .h-файлы это хедеры. То есть там вроде как должны быть определения типов данных, структуры классов и т. п. А код по идее должен быть только в .cpp-файлах.

Хедеры подключаются в файлы — то есть прямиком вставляются в исходник во время компиляции.

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

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

Конкретно Visual Studio это делает с помощью этого самого stdafx. Все инклюды, что идут перед #include "stdafx.h", выносятся в этот отдельный файл, компилируются там, а интерфейс к этом файлу запихивается в этот самый stdafx.h, чтобы остальная часть исходника ни о чём не подозревала.

Спасибо за ответ!
Еще хочу уточнить, когда на одном копмьютере в студии я создаю консольное приложение через File-new project-win32 console application - add new item - c++ file, то создаются файлы stdafx, а на другом - нет.
Читала, что их можно подключить через Precompiled Headers в свойствах проекта, но когда я выбираю Create Precompiled Headers - файлы не создаются. Как и все-таки можно подключить?
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
21.10.2012, 02:41     файлы stdafx #5
Цитата Сообщение от nutius Посмотреть сообщение
Еще хочу уточнить, когда на одном копмьютере в студии я создаю консольное приложение через File-new project-win32 console application - add new item - c++ file, то создаются файлы stdafx, а на другом - нет.
Разные версии студий, разные настройки прекомпилированных заголовков, разные тараканы.

Цитата Сообщение от nutius Посмотреть сообщение
Читала, что их можно подключить через Precompiled Headers в свойствах проекта, но когда я выбираю Create Precompiled Headers - файлы не создаются. Как и все-таки можно подключить?
Ну как подключить. Просто если поставить галочку возле "прекомпелированные заголовки" при создании проекта то студия их сунет в файл проекта. Делает это всё чтобы ускорить процесс сборки, если галочку не ставить то файлы в папке проекта не появятся да и директиву можно убрать из проекта (студия не будет их всё равно искать). А вообще не заморачивайте голову этим, и без них всё будет работать
warchief
 Аватар для warchief
36 / 36 / 3
Регистрация: 09.08.2012
Сообщений: 114
21.10.2012, 06:21     файлы stdafx #6
stdafx это просто имя по умолчанию. Вы можете задавать любое. Это относится к предкомпилированным заголовкам
гугли "Предварительно откомпилированные заголовки"
Там написано и для чего и как и почему

Цитата Сообщение от nutius Посмотреть сообщение
а иногда они не создаются?
Ничего случайного в компьютере не может быть.
Когда создаешь проект. Открывается окно. Вместо того чтобы тупо нажимать Готово, жми Дальше, увидешь вот такое окно
http://www.imageup.ru/img298/1078603/bezymyannyjj.jpg

Видишь в самом низу стоит флажок? Вот если его снять. Файла stdafx не будет. А если оставить, то файл stdafx появится. Новичкам которые не знают что это такое - нужно снимать этот флажок, иначе получите ошибки которые просто не сможете исправить от незнания того, где это настраивается.

Для чего это нужно? Вот есть проект, он собирается например, двадцать минут. После того как вы примените эту технологию, проект будет полностью пересобираться возможно даже за две минуты. Разница ощутима.
Yandex
Объявления
21.10.2012, 06:21     файлы stdafx
Ответ Создать тему
Опции темы

Текущее время: 21:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru