Может ли «#pragma Once» вызвать ошибки?

Все мои заголовочные файлы используют include guards, а также прагму Once:

#pragma once
#ifndef FILE_NAME_H
#define FILE_NAME_H

class foo
{
    //foo interface..
};

#endif /* FILE_NAME_H */

Я понимаю, что pragma Onceне является стандартной и может не совпадать в разных компиляторах, но есть ли шанс, что она вызовет ошибку? Не лучше ли сначала как-то проверить, доступно ли оно?

#ifdef THIS_COMPILER_SUPPORTS_PRAGMA_ONCE
    #pragma once
#endif

#ifndef FILE_NAME_H
#define FILE_NAME_H

class foo
{
    //foo interface..
};

#endif /* FILE_NAME_H */

Я хочу предоставить pragma Onceв качестве опции для возможного ускорения компиляции и предотвращения конфликтов имен, при этом обеспечивая совместимость между компиляторами.

5
задан Brian Tompsett - 汤莱恩 25 June 2016 в 21:45
поделиться