Удалить предупреждения #pragma once


Я использую #pragma once в моих .cpp s и .hpp s, и из-за этого я получаю предупреждение для каждого файла, который его использует. Я не нашел никакой возможности отключить этот вид предупреждения, только вещь #ifndef MY_FILE_H #define MY_FILE_H /*...*/ #endif.

Итак, вы бы рекомендовали мне заменить каждый #pragma once на ifndef s?

В заголовке:

#define MYFILE_H
// all the header

И в других файлах:

#ifndef MYFILE_H
#include "myfile.hpp"
#endif
// the rest of the file
Как вы думаете, может быть, лучше использовать его вот так? Или есть возможность отключить #pragma once предупреждения в GCC, что я не знаю?
2 2

2 ответа:

Общий подход состоит в том, чтобы поместить охранника в .только файл h:

#ifndef MYFILE_H
#define MYFILE_H
// all your myfile.hpp here
#endif

Или

#pragma once
// all your myfile.hpp here

Остальные файлы (прочие .cpp) ничего не должен делать в отношении охранников. Вы не должны получать предупреждения, делая это.

Действительно, #ifndef guard всегда можно использовать, но просто для удаления предупреждения при компиляции источника, который использует #pragma once, я бы рекомендовал использовать опцию -wпри компиляции.

Например gcc -w -o <output file> <input file(s)>