Нафиг сдалась эта #pragma once! Ни разу не видел ни одного исходника с такой директивой. А вот #ifndef __HEADER_H__ #define __HEADER_H_ ... #endif - классика. И многие текстовые редакторы (хоть тот же gedit) вставляют ее по клавосочетанию. В geany легко настроить «автодополнение» для этого (которое автоматом будет конвертировать имя файла header.h в имя макроса __HEADER_H__).
Вы думаете, кто-нибудь додумается библиотечный макрос обозвать чем-то вроде __MYMATHMETHOD_H__? Сомневаюсь, что подобный конфликт имен имеет ненулевую вероятность...
охох, сейчас набегут борцуны невидимого фронта и начнут трещать, что это пережиток прошлого и все популярные компиляторы нынче поддерживают #pragma once :)
Применение #pragma once вместо include guard увеличит скорость компиляции во многих случаях благодаря высокоуровневому механизму; компилятор может самостоятельно сравнивать имена файлов или inode'ы без необходимости вызова препроцессора Си для проверки заголовка на наличие #ifndef и #endif.
С другой стороны, некоторые компиляторы, как например, GCC, также использует специальный код для распознавания и оптимизации обработки include guard.
Можно использовать обе команды, #pragma once и include guards, для написания переносимого кода, что также может принести выгоду от применения #pragma once при оптимизации (если компилятор её поддерживает)