Sdílet prostřednictvím


once pragma

Určuje, že kompilátor obsahuje hlavičkový soubor pouze jednou při kompilaci souboru zdrojového kódu.

Syntaxe

#pragma once

Poznámky

Použití #pragma once může zkrátit dobu sestavení, protože kompilátor neotevře a znovu přečte soubor za prvním #include ze souboru v lekci překladu. Označuje se jako optimalizace s více zahrnutími. Má podobný účinek jako idiom include guard , který používá definice maker preprocesoru, aby se zabránilo více zahrnutí obsahu souboru. Pomáhá také zabránit porušení jednoho pravidla definice: požadavek, aby všechny šablony, typy, funkce a objekty v kódu neměly více než jednu definici.

Příklad:

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

Doporučujeme direktivu #pragma once pro nový kód, protože neznečistí globální obor názvů symbolem preprocesoru. Vyžaduje méně psaní, je méně rušivé a nemůže způsobit kolize symbolů. Kolize symbolů jsou chyby způsobené tím, že různé soubory hlaviček používají stejný symbol preprocesoru jako hodnota ochrany. Není součástí standardu C++, ale implementuje ho několik běžných kompilátorů.

Neexistuje žádná výhoda použití obou ochranných idiomů a #pragma once ve stejném souboru. Kompilátor rozpozná idiom include a implementuje optimalizaci multiple-include stejným způsobem jako direktiva #pragma once , pokud před nebo za standardní formou idiomu nepřichází žádný kód bez komentáře nebo preprocesoru:

// 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_

Doporučujeme zahrnout idiom ochrany, pokud kód musí být přenositelný na kompilátory, které neimplementují direktivu #pragma once , udržovat konzistenci s existujícím kódem nebo když optimalizace s více zahrnutími není možné. Může k němu dojít v složitých projektech, když aliasy systému souborů nebo aliasy zahrnují cesty brání kompilátoru v identifikaci identických souborů include podle kanonické cesty.

Dávejte pozor, abyste #pragma once v souborech hlaviček, které mají být vloženy vícekrát, a používejte symboly preprocesoru k řízení jejich efektů. Příklad tohoto návrhu naleznete v souboru hlavičky <assert.h> . Také buďte opatrní při správě cest zahrnutí, abyste se vyhnuli vytváření více cest k zahrnutým souborům, což může porazit optimalizaci více zahrnutí pro oba zahrnují stráže i #pragma once.

Viz také

Direktivy Pragma a __pragma_Pragma klíčová slova