Secara tradisional, cara standar dan portabel untuk menghindari beberapa inklusi header dalam C ++ adalah / adalah dengan menggunakan #ifndef - #define - #endifskema arahan pra-kompiler juga disebut skema penjaga makro (lihat cuplikan kode di bawah).
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
Di sebagian besar implementasi / kompiler (lihat gambar di bawah), ada alternatif yang lebih "elegan" yang memiliki tujuan yang sama dengan skema penjaga makro yang disebut #pragma once. #pragma oncememiliki beberapa keunggulan dibandingkan dengan skema penjaga makro, termasuk lebih sedikit kode, menghindari bentrokan nama, dan kadang-kadang meningkatkan kecepatan kompilasi.

Melakukan penelitian, saya menyadari bahwa meskipun #pragma oncedirektif didukung oleh hampir semua kompiler yang dikenal, ada keruh pada apakah #pragma oncedirektif merupakan bagian dari standar C ++ 11 atau tidak.
Pertanyaan:
- Bisakah seseorang mengklarifikasi apakah
#pragma oncearahan merupakan bagian dari standar C ++ 11 atau tidak? - Jika itu bukan bagian dari standar C ++ 11, apakah ada rencana untuk memasukkannya pada rilis nanti (mis., C ++ 14 atau lebih baru)?
- Akan lebih baik jika seseorang dapat menguraikan lebih lanjut tentang kelebihan / kekurangan dalam menggunakan salah satu teknik (yaitu, penjaga makro versus
#pragma once).
#pragma oncebiasanya tidak.