/external
(Dış üst bilgi tanılamaları)
Derleyici seçenekleri, /external
belirli üst bilgi dosyaları için derleyici tanılama davranışını belirtmenize olanak sağlar. "Dış" üst bilgiler "Yalnızca kodum" öğesinin doğal tamamlayıcısıdır: Sistem dosyaları veya değiştirmek istemediğiniz üçüncü taraf kitaplık dosyaları gibi üst bilgi dosyaları. Bu dosyaları değiştirmeyeceksiniz, derleyiciden bu dosyalar hakkında tanılama iletilerini görmenin yararlı olmadığına karar vekleyebilirsiniz. Derleyici /external
seçenekleri size bu uyarılar üzerinde denetim sağlar.
/external
Derleyici seçenekleri Visual Studio 2017 sürüm 15.6'dan itibaren kullanılabilir. Visual Studio'nun Visual Studio 2019 sürüm 16.10'un önceki sürümlerinde, /external
seçenekler derleyici seçeneğini de ayarlamanızı /experimental:external
gerektirir.
Sözdizimi
Dış üst bilgi seçeneklerini kullanın (16.10 ve üzeri sürümlerde gerekli değildir):
/experimental:external
Dış üst bilgileri belirtin:
/external:anglebrackets
/external:env:
var
/external:I
path
Tanılama davranışını belirtin:
/external:W0
/external:W1
/external:W2
/external:W3
/external:W4
/external:templates-
Bağımsız değişkenler
/experimental:external
Dış üst bilgi seçeneklerini etkinleştirir. Bu seçenek Visual Studio 2019 sürüm 16.10 ve sonraki sürümlerde gerekli değildir.
/external:anglebrackets
dosyasının header
açılı ayraç (< >
) içine alındığı ve tarafından #include <header>
dahil edilen tüm üst bilgileri dış üst bilgiler olarak kabul eder.
/external:I
path
Dış üst bilgiler içeren bir kök dizin tanımlar. tüm özyinelemeli alt dizinleri path
dış olarak kabul edilir, ancak derleyicinin path
dahil dosyaları için arama yapacağı dizin listesine yalnızca değer eklenir. ile path
arasındaki /external:I
boşluk isteğe bağlıdır. Boşluk içeren dizinler çift tırnak içine alınmalıdır. Dizin, mutlak bir yol veya göreli bir yol olabilir.
/external:env:
var
Dış üst bilgi dizinlerinin noktalı virgülle ayrılmış listesini tutan bir ortam değişkeninin var
adını belirtir. Dış ekleme dosyalarının listesini belirtmek için kullandığınız gibi INCLUDE
ortam değişkenlerini kullanan derleme sistemleri için kullanışlıdır. CAExcludePath
veya tarafından /analyze
analiz edilmemesi gereken dosyalar için . Örneğin, dış üst bilgi dizinindeki INCLUDE
her dizini aynı anda yapmayı belirtebilirsiniz/external:env:INCLUDE
. Tek tek dizinleri belirtmek için kullanmakla /external:I
aynıdır, ancak çok daha az ayrıntılıdır. ile /external:env:
arasında var
boşluk olmamalıdır.
/external:Wn
Bu seçenek, dış üst bilgiler için varsayılan uyarı düzeyini n
(0 ile 4 arasında bir değer) olarak ayarlar. Örneğin, /external:W0
dış üst bilgiler için uyarıları etkin bir şekilde kapatır. Bu seçenek belirtilmezse, derleyici diğer /external
seçenekler için komut satırı uyarısı D9007'yi oluşturur. Hiçbir etkisi olmayacağından bu seçenekler yoksayılır.
seçeneği, /external:Wn
bir yönergeye dahil edilen üst bilgiyi sarmalama gibi bir #pragma warning
etkiye sahiptir:
#pragma warning (push, 0)
// the global warning level is now 0 here
#include <external_header>
#pragma warning (pop)
/external:templates-
Dış üst bilgilerden gelen uyarılara, kodunuzda örneğini oluşturan bir şablonda gerçekleştiğinde izin verir.
Açıklamalar
Varsayılan olarak, /Wn
derlemeniz için belirttiğiniz uyarı düzeyi tüm dosyalar için geçerlidir. Dış üst bilgileri belirtme seçenekleri yalnızca farklı bir varsayılan uyarı düzeyi uygulayabileceğiniz bir dosya kümesi tanımlar. Bu nedenle, dış üst bilgiler belirtirseniz, derleyici davranışını değiştirmek için bir dış uyarı düzeyi belirtmek için de kullanın /external:Wn
.
Uyarıları etkinleştirmek, devre dışı bırakmak ve bastırmak için mevcut tüm mekanizmalar hem dış hem de dış olmayan dosyalarda çalışmaya devam eder. Örneğin, pragma warning
yine de dış üst bilgiler için ayarladığınız varsayılan uyarı düzeyini geçersiz kılabilir.
Örnek: Dış uyarı düzeyini ayarlama
Bu örnek programın iki kaynak dosyası program.cpp
vardır ve header_file.h
. Dosya header_file.h
, dosyayı içeren dizinin bir include_dir
alt dizinindedir program.cpp
:
Kaynak dosya include_dir/header_file.h
:
// External header: include_dir/header_file.h
template <typename T>
struct sample_struct
{
static const T value = -7; // W4: warning C4245: 'initializing':
// conversion from 'int' to 'unsigned int', signed/unsigned mismatch
};
Kaynak dosya program.cpp
:
// User code: program.cpp
#include <header_file.h>
int main()
{
return sample_struct<unsigned int>().value;
}
Bu komut satırını kullanarak örneği oluşturabilirsiniz:
cl /EHsc /I include_dir /W4 program.cpp
Beklendiği gibi, bu örnek bir uyarı oluşturur:
program.cpp
include_dir\header_file.h(6): warning C4245: 'initializing': conversion from 'int' to 'const T', signed/unsigned mismatch
with
[
T=unsigned int
]
program.cpp(6): note: see reference to class template instantiation 'sample_struct<unsigned int>' being compiled
Üst bilgi dosyasını dış dosya olarak ele almak ve uyarıyı engellemek için bunun yerine* şu komut satırını kullanabilirsiniz:
cl /EHsc /I include_dir /external:anglebrackets /external:W0 /W4 program.cpp
Bu komut satırı içindeki uyarıları korurken içindeki header_file.h
program.cpp
uyarıyı gizler.
İç ve dış sınır genelinde uyarılar
Dış üst bilgiler için düşük bir uyarı düzeyi ayarlamak bazı eyleme dönüştürülebilir uyarıları gizleyebilir. Özellikle, kullanıcı kodundaki şablon örneklemelerinde yayılan uyarıları kapatabilir. Bu uyarılar, kodunuzda yalnızca belirli türler için örneklemelerde gerçekleşen bir sorunu gösterebilir. (Örneğin, bir tür özelliği kaldırma const
veya &
uygulamayı unuttuysanız.) Dış üst bilgilerde tanımlanan şablonların içinde uyarıların sessize alınmasını önlemek için seçeneğini kullanabilirsiniz /external:templates-
. Derleyici, hem şablonu tanımlayan dosyadaki geçerli uyarı düzeyini hem de şablon örneklemesinin gerçekleştiği uyarı düzeyini dikkate alır. Dış şablonun içinde yayılan uyarılar, dış olmayan kod içinde örneklenirse görünür. Örneğin, bu komut satırı örnek koddaki* şablon kaynaklarından gelen uyarıları yeniden etkinleştirir:
cl /EHsc /I include_dir /external:anglebrackets /external:W0 /external:templates- /W4 program.cpp
C4245 uyarısı, şablon kodu bir dış üst bilgi içinde olsa bile çıkışta yeniden görünür.
Uyarıları etkinleştirme, devre dışı bırakma veya gizleme
Uyarıları etkinleştirmek, devre dışı bırakmak ve bastırmak için mevcut tüm mekanizmalar dış üst bilgilerde çalışmaya devam eder. Seçeneğini kullandığınız /external:templates-
için bir uyarı görüntülendiğinde, örnekleme noktasında uyarıyı yine de gizleyebilirsiniz. Örneğin, nedeniyle yeniden görüntülenen örnekteki uyarıyı açıkça engellemek için /external:templates-
bir warning
pragma yönergesi kullanın:
int main()
{
#pragma warning( suppress : 4245)
return sample_struct<unsigned int>().value;
}
Kitaplık yazarları, bu uyarıların hiçbir zaman tarafından /external:Wn
susturulmaması gerektiğini hissederlerse, belirli uyarıları veya belirli düzeydeki tüm uyarıları zorunlu kılmak için aynı mekanizmaları kullanabilir. Örneğin, üst bilgi dosyasının bu sürümü C4245 uyarısını bir hata bildirmeye zorlar:
// External header: include_dir/header_file.h
#pragma warning( push, 4 )
#pragma warning( error : 4245 )
template <typename T>
struct sample_struct
{
static const T value = -7; // W4: warning C4245: 'initializing': conversion from 'int'
// to 'unsigned int', signed/unsigned mismatch
};
#pragma warning( pop )
Kitaplık üst bilgisindeki bu değişiklikle, kitaplığın yazarı içinde ne belirtilirse belirtsin /external:Wn
, bu üst bilgideki genel uyarı düzeyinin 4 olmasını sağlar. Artık tüm düzey 4 ve üzeri uyarılar bildirilir. Kitaplık yazarı ayrıca bazı uyarıların hata, devre dışı bırakılması, gizlenmeyen veya üst bilgide yalnızca bir kez yayılmaya zorlayabilir. Seçenekler /external
bu kasıtlı seçimi geçersiz kılmaz.
system_header
pragma
#pragma system_header
, kitaplık yazarlarının belirli üst bilgileri dış olarak işaretlemesine olanak tanıyan müdahaleci bir işaretçidir. içeren #pragma system_header
bir dosya, pragma noktasından dosyanın sonuna kadar komut satırında dış olarak belirtilmiş gibi dış olarak kabul edilir. Derleyici tarafından belirtilen /external:Wn
uyarı düzeyinde pragmasından sonra tüm tanılamaları yayar. Daha fazla bilgi için bkz system_header
. pragma.
Sınırlamalar
Derleyicinin arka uç kod oluşturma işlemi tarafından yayılan bazı uyarılar seçeneklerden /external
etkilenmez. Bu uyarılar genellikle C47XX ile başlar, ancak tüm C47XX uyarıları arka uç uyarıları değildir. Kullanarak bu uyarıları tek tek /wd47XX
devre dışı bırakabilirsiniz. Uyarı düzeyleri olmadığından kod analizi uyarıları da etkilenmez.
Bu derleyici seçeneğini Visual Studio geliştirme ortamında ayarlamak için
Visual Studio 2019 sürüm 16.10 ve sonraki sürümlerde:
Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.
Yapılandırma Özellikleri>VC++ Dizinleri özellik sayfasını seçin.
Her noktalı virgülle ayrılmış yol için seçeneğin IDE eşdeğerini
/external:I path
belirtmek için Dış Ekleme Dizinleri özelliğini ayarlayın.Yapılandırma Özellikleri>C/C++>Dış İçerir özellik sayfasını seçin.
Özellikleri ayarla:
Seçeneği ayarlamak için Açılı Köşeli Ayraçlarla Birlikte Gelen Dosyaları Kabul Etme'yi Dış olarak Evet olarak ayarlayın
/external:anglebrackets
.Dış Üst Bilgi Uyarı Düzeyi seçeneği ayarlamanıza
/external:Wn
olanak tanır. Bu değer Proje Uyarı Düzeyini Devral olarak veya varsayılan olarak ayarlanırsa, diğer/external
seçenekler yoksayılır.Seçeneği ayarlamak için Dış Üst Bilgilerde Şablon Tanılama'yı Evet olarak
/external:templates-
ayarlayın.
Değişikliklerinizi kaydetmek için Tamam'ı veya Uygula'yı seçin.
Visual Studio'nun Visual Studio 2019 sürüm 16.10'un önceki sürümlerinde:
Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.
Yapılandırma Özellikleri>C/C++>Komut Satırı özellik sayfasını seçin.
Ek Seçenekler kutusuna
/experimental:external
seçeneği ve diğer/external
derleyici seçeneklerini girin.Değişikliklerinizi kaydetmek için Tamam'ı veya Uygula'yı seçin.
Bu derleyici seçeneğini program üzerinden ayarlamak için
- Bkz. AdditionalOptions.
* Visual Studio 2019 sürüm 16.10'undan önceki Visual Studio sürümlerinde dış üst bilgi seçeneklerini etkinleştirme seçeneğini ekleyin /experimental:external
.
Ayrıca bkz.
MSVC derleyici seçenekleri
MSVC derleyicisi komut satırı söz dizimi