@ManyBytes

Зачем используются вместе #pragma once и header guards?

Изучая стандартные библиотеки в Visual Studio 2019 меня удивили подобные строчки:
// string standard header

#pragma once
#ifndef _STRING_
#define _STRING_

// vector standard header

#pragma once
#ifndef _VECTOR_
#define _VECTOR_

Я думал, что прагма и header guards взаимозаменяемы и выполняют ту же функцию - пресекают дублирование кода.
С какой целью их использовали вместе?
  • Вопрос задан
  • 535 просмотров
Решения вопроса 1
@ManyBytes Автор вопроса
Всем спасибо за помощь! Adamos верно подсказал - в "https://ru.wikipedia.org/wiki/Pragma_once" сказано:
Можно использовать обе команды, #pragma once и include guards, для написания переносимого кода, что также может принести выгоду от применения #pragma once при оптимизации (если компилятор её поддерживает):

Хотя здесь "https://docs.microsoft.com/en-us/cpp/preprocessor/..." сказано:
There's no advantage to use of both the include guard idiom and #pragma once in the same file.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ну как минимум из-за того что Pragma once - это нестандартная директива, и компилятор не обязан её поддерживать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы