Защита двойных заголовков в реализации Visual Studio stl numeri c - PullRequest
0 голосов
/ 29 мая 2020

В реализации stl, которая поставляется вместе с Visual Studio 12.0, заголовок numeric выглядит так:

#pragma once
#ifndef _NUMERIC_
#define _NUMERIC_

// shortened for the sake of readibility
. 
.
.


#endif /* _NUMERIC_ */

Я знаю, что #pragma once не соответствует стандарту .

Тем не менее, почему они внедрили двойную защиту заголовка?

1 Ответ

0 голосов
/ 01 июня 2020

#pragma once: один и тот же файл не будет включаться несколько раз include guard idiom : использует определения макроса препроцессора для предотвращения многократного включения содержимого файла.

Согласно Do c

Нет никакого преимущества в использовании идиомы include guard и #pragma once в одном файле. Компилятор распознает идиому include guard и реализует оптимизацию с несколькими включениями так же, как директива #pragma once, если не идет код без комментариев или директива препроцессора до или после стандартной формы идиомы

Предлагаю вам обратиться по ссылке: { ссылка }

...