/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 INCLUDEortam değişkenlerini kullanan derleme sistemleri için kullanışlıdır. CAExcludePathveya tarafından /analyzeanaliz 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.cppuyarı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:Wnsusturulmaması 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:Wnuyarı 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 /wd47XXdevre 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:

  1. Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.

  2. Yapılandırma Özellikleri>VC++ Dizinleri özellik sayfasını seçin.

  3. 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.

  4. Yapılandırma Özellikleri>C/C++>Dış İçerir özellik sayfasını seçin.

  5. Ö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.

  6. 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:

  1. Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.

  2. Yapılandırma Özellikleri>C/C++>Komut Satırı özellik sayfasını seçin.

  3. Ek Seçenekler kutusuna /experimental:external seçeneği ve diğer /external derleyici seçeneklerini girin.

  4. Değişikliklerinizi kaydetmek için Tamam'ı veya Uygula'yı seçin.

Bu derleyici seçeneğini program üzerinden ayarlamak için

* 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