Bagikan melalui


once pragma

Menentukan bahwa pengkompilasi menyertakan file header hanya sekali, saat mengkompilasi file kode sumber.

Sintaks

#pragma once

Keterangan

Penggunaan #pragma once dapat mengurangi waktu build, karena pengkompilasi tidak akan membuka dan membaca file lagi setelah file pertama #include di unit terjemahan. Ini disebut pengoptimalan multi-sertakan. Ini memiliki efek yang mirip dengan termasuk idiom penjaga , yang menggunakan definisi makro praprosesor untuk mencegah beberapa penyertaan konten file. Ini juga membantu mencegah pelanggaran dari satu aturan definisi: persyaratan bahwa semua templat, jenis, fungsi, dan objek memiliki tidak lebih dari satu definisi dalam kode Anda.

Contohnya:

// header.h
#pragma once
// Code placed here is included only once per translation unit

Kami merekomendasikan direktif #pragma once untuk kode baru karena tidak mencemari namespace global dengan simbol praprosem. Ini membutuhkan lebih sedikit pengetikan, itu kurang mengganggu, dan tidak dapat menyebabkan tabrakan simbol. Tabrakan simbol adalah kesalahan yang disebabkan ketika file header yang berbeda menggunakan simbol pra-pemrosesan yang sama dengan nilai penjaga. Ini bukan bagian dari Standar C++, tetapi diimplementasikan secara portabel oleh beberapa kompilator umum.

Tidak ada keuntungan untuk menggunakan idiom #pragma once penjaga serta dalam file yang sama. Pengompilasi mengenali idiom penjaga yang disertakan, dan mengimplementasikan pengoptimalan multiple-include dengan cara yang sama seperti #pragma once arahan jika tidak ada kode non-komentar atau arahan praprosedur yang datang sebelum atau sesudah bentuk standar idiom:

// header.h
// Demonstration of the #include guard idiom.
// Note that the defined symbol can be arbitrary.
#ifndef HEADER_H_     // equivalently, #if !defined HEADER_H_
#define HEADER_H_
// Code placed here is included only once per translation unit
#endif // HEADER_H_

Sebaiknya sertakan idiom penjaga ketika kode harus portabel untuk pengompilasi yang tidak menerapkan #pragma once arahan, untuk mempertahankan konsistensi dengan kode yang ada, atau ketika pengoptimalan multi-sertakan tidak mungkin. Ini dapat terjadi dalam proyek kompleks ketika alias sistem file atau alias menyertakan jalur mencegah pengompilasi mengidentifikasi file yang identik dengan jalur kanonis.

Berhati-hatilah untuk tidak menggunakan #pragma once atau menyertakan idiom penjaga dalam file header yang dirancang untuk disertakan beberapa kali, yang menggunakan simbol praproscesor untuk mengontrol efeknya. Untuk contoh desain ini, lihat <file header assert.h> . Berhati-hatilah untuk mengelola jalur include Anda untuk menghindari pembuatan beberapa jalur ke file yang disertakan, yang dapat mengalahkan pengoptimalan multi-include untuk keduanya termasuk penjaga dan #pragma once.

Baca juga

Arahan Pragma dan __pragma_Pragma kata kunci