Разное

Библиотека stdafx h: c++ — Где взять stdafx.h в Visual Studio 2019?

c++ — stdafx.h visual studio

Вопрос задан

Изменён 1 год 2 месяца назад

Просмотрен 257 раз

В проекте используется сторонняя библиотека MyLibrary, которая не изменяется. Для неё определено единое пространство имён my_library. Стоит ли в stdafx.h писать using namespace my_library, наряду с #include "MyLibrary.h", или нужно в каждом файле прописывать using namespace my_library?

P.s.: функции из неё часто используются, имена длинные, поэтому вообще не писать using namespace my_library не годится

  • c++
  • visual-studio
  • visual-c++

1

using namespace в любом заголовочном файле (не только stdafx. h) это зло, как уже ответили ранее. Другие программисты, включившие такой файл в свой код получают сюрприз в виде ваших идентификаторов в глобальном пространстве имен.

Даже в ваших .cpp рекомендовал бы явно прописывать my_library:: без using namespace. Это будет наглядней, позволит избежать ошибок из-за совпадений идентификаторов, а также сделает более удобной автоподстановку в редакторе.

Если my_library:: все таки кажется длинным, можно задать алиас, например так:

namespace ml = my_library;

И далее используйте сокращенную форму: ml::foo()

Глобальная рекомендация (не моя :)) — пореже использовать using namespace, используя using с конкретными именами.

Если вы используете using namespace, не стоит помещать эту директиву в заголовочный файл, так как эта директива вносит все имена из пространства в глобальное пространство имен — чего, собственно, стремились избежать введением пространств имен.

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

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

c++ — Проблемы с Visual Studio

Вопрос задан

Изменён 5 дней назад

Просмотрен 281 раз

Учился раньше на NetBeans.

Решил попробовать один из самых известных компиляторов. Хотел написать простейшую программу, и выводит ошибку. Библиотеку #include <iostream> подключил.
Почему происходит ошибка?

P.S. Без "stdafx" все еще хуже. И я не видел в учебниках, что нужно эту библиотеку подключать.

  • c++
  • visual-studio

7

У вас есть некоторый пробел по фундаментальным понятиям С++, таким как препроцессор и директива #include в частности.

Директива #include как правило служит для включения заголовочных файлов. Эти файлы могут содержать определения функций, условия компиляции программы под ту или иную платформу, наборы констант и т.д. Поэтому называть любой файл в кавычках после #include библиотекой некорректно. Более подробно можно почитать тут: http://www.cyberforum.ru/blogs/18334/blog100.html и тут: https://msdn.

microsoft.com/ru-ru/library/36k2cdd4.aspx

Stdafx.h это специализированный заголовочный файл присущий только для visual studio, о его назначении можно почитать тут: https://habrahabr.ru/company/pvs-studio/blog/227521/

В вашем случае вы по незнанию допустили ошибку включив «iostream» перед «stdafx.h», это всегда приводит к ошибкам компиляции. Заголовочный файл «stdafx.h» должен включаться в .c/.cpp файл самым первым.

Сохраняйте спокойствие, программирование не всегда просто и понятно, не стесняйтесь гуглить «что такое stdafx.h». Все когда-то начинали и были в схожей ситуации, когда хочется бить клавиатурой по монитору и кричать «какого *** ты не работаешь». P.S. Для visual studio советую поставить аддон Visual Assist, который значительно упрощает написание кода.

3

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Использование — документация fmt 5.

2.1

Чтобы использовать библиотеку fmt, добавьте format.h и format.cc из архив релиза или репозиторий Git для вашего проекта. Кроме того, вы можете собрать библиотеку с помощью CMake.

Если вы используете Visual C++ с предварительно скомпилированными заголовками, вам может потребоваться добавить линия

 #include "stdafx.h"
 

, прежде чем другие включаются в формат .cc .

Строительство библиотеки

Включенный скрипт сборки CMake можно использовать для сборки fmt библиотека на различных платформах. CMake находится в свободном доступе для скачать с http://www.cmake.org/download/.

CMake работает путем создания собственных make-файлов или файлов проекта, которые могут использоваться в среде компилятора по вашему выбору. Типичный рабочий процесс начинается с:

 mkdir build # Создать каталог для хранения выходных данных сборки.
сборка компакт-диска
cmake  # Создание собственных сценариев сборки. 
 

, где — это путь к репозиторию fmt .

Если вы работаете в системе *nix, теперь вы должны увидеть Makefile в Текущий каталог. Теперь вы можете собрать библиотеку, запустив сделать .

После сборки библиотеки вы можете вызвать make test для запуска тесты.

Вы можете управлять созданием цели make test с помощью FMT_TEST Вариант CMake. Это может быть полезно, если вы включите fmt в качестве подкаталога в ваш проект, но не хотите добавлять тесты fmt к вашей цели test .

Если вы используете Windows и у вас установлена ​​Visual Studio, файл

FORMAT.sln файл и несколько .vcproj 9Будет создано 0004 файлов. Затем вы можете построить их с помощью Visual Studio или MSBuild.

В Mac OS X с установленным Xcode будет создан файл .xcodeproj .

Чтобы создать общую библиотеку, установите для переменной CMake BUILD_SHARED_LIBS значение ИСТИНА :

 cmake -DBUILD_SHARED_LIBS=ИСТИНА. ..
 

Создание документации

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

  • Python с pip и virtualenv

  • Доксиген

  • Меньше с less-plugin-clean-css . Ubuntu не упаковывает плагин clean-css , поэтому вам следует использовать npm . вместо apt

    установить оба меньше и плагин:

     sudo npm install -g less less-plugin-clean-css.
     

Сначала создайте make-файлы или файлы проекта с помощью CMake, как описано в предыдущий раздел. Затем скомпилируйте doc цель/проект, например:

 сделать документ
 

Будет сгенерирована документация HTML в формате doc/html .

Android НДК

fmt предоставляет файл Android.mk, который можно использовать для сборки библиотеки. с Android NDK. Пример использования fmt с Android NDK см. android-ndk-пример репозиторий.

Домашний пивовар

fmt можно установить на OS X с помощью Homebrew:

 варить установить fmt
 

Reddit — Погрузитесь во что угодно

Я использую Visual Studio 2013, включая компилятор 120 для VC++.

У меня есть проект библиотеки, который содержит внутренний код C++ и некоторый внешний код C++ и C.

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

Настройка предварительно скомпилированных заголовков потребовала нескольких изменений конфигурации:

  • Мне пришлось установить «Создать предварительно скомпилированный заголовок» в самом проекте библиотеки в VS, чтобы он сгенерировал файл .pch.

  • Я создал довольно обычный заголовок StdAfx.h с именем XxStdAfx.h, который включает в себя необходимые файлы заголовков, которые многократно используются в других исходных файлах, а также собственные определенные типы.

  • Я создал дополнительный (и пустой) XxStdAfx.cpp и установил для параметра Precompiled Headers в этом исходном файле значение «Создать».

С помощью этой комбинации мне удалось сгенерировать предварительно скомпилированные заголовки для моей библиотеки для всех целей сборки (релиз/отладка, x86/x64).

Далее, экспериментируя с библиотекой LZMA, я добавил исходники прямо в проект. Эта библиотека представляет собой чистый C, поэтому я оставил параметр «Скомпилировать как» в VS как «По умолчанию», а не выбрал C или C++. Кроме того, для каждого файла .c в коллекции LZMA я выбрал «Не использовать предварительно скомпилированные заголовки».

Отлично сработало; Мне удалось собрать библиотеку с предварительно скомпилированными заголовками, включая поддержку LZMA.

Затем я рассматриваю возможность добавления поддержки SQLite (3), которая также является C. Добавляя источник таким же образом, как LZMA, VS продолжает ошибаться с C2857 ошибка , указывающая на то, что инструкция '#include', указанная с параметром командной строки /YcXxStdAfx. h, не найдена в исходном файле.

Я потратил несколько часов, пытаясь понять, в чем проблема с SQLite, а не с LZMA. Я начинаю чувствовать, что в VS есть ошибка, как я сказал (через графический интерфейс) явно НЕ для использования предварительно скомпилированных заголовков, но вот он, все еще пытаюсь их искать/использовать.

Кто-нибудь может посоветовать, что я мог упустить из виду?

РЕДАКТИРОВАТЬ 1:

Я сделал несколько открытий, но я довольно запутался.

В отношении StdAfx.h, StdAfx.cpp и других файлов .cpp ясно, что StdAfx.h включает в себя все заголовки, подлежащие предварительной компиляции, а StdAfx.cpp отвечает за создание файла .pch. В VS мы выбираем «Создать PCH» для StdAfx.cpp, а для всех остальных файлов .cpp выбираем «Использовать PCH».

Однако есть еще одна странная опция: Настройки проекта.

В настройках проекта вы можете выбрать «Создать», «Использовать» или «Без использования PCH».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *