Стандартные заголовки C ++ не используют .h. Все остальное делает (или, точнее, все остальное использует любое расширение, которое ему нужно, .h, .hxx, .hpp, .hh и другие).
Стандартные заголовки C могут быть включены одним из двух способов:
#include <stdio.h>
#include <cstdio>
Вторая форма переносит свои символы в пространство имен std
.
Первоначально предполагалось, что заголовки, в принципе, могут храниться в базе данных в каком-то высоко оптимизированном предварительно скомпилированном состоянии, и в этом случае идея расширения файла не имеет смысла. Я не знаю, что это когда-либо происходило на практике.