Secara tradisional, cara standar dan portabel untuk menghindari beberapa inklusi header dalam C ++ adalah / adalah dengan menggunakan #ifndef - #define - #endif
skema 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 once
memiliki 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 once
direktif didukung oleh hampir semua kompiler yang dikenal, ada keruh pada apakah #pragma once
direktif merupakan bagian dari standar C ++ 11 atau tidak.
Pertanyaan:
- Bisakah seseorang mengklarifikasi apakah
#pragma once
arahan 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 once
biasanya tidak.