/Zc:inline (Başvurulmayan COMDAT'ı kaldırma)

Başvurulmamış VERILERI veya COMDAT olan veya yalnızca iç bağlantısı olan işlevleri kaldırır. altında /Zc:inline, derleyici satır içi verileri veya işlevleri olan çeviri birimlerinin de tanımlarını içermesi gerektiğini belirtir.

Sözdizimi

/Zc:inline[-]

Açıklamalar

Belirtildiğinde /Zc:inline , derleyici başvurulmayan COMDAT işlevleri veya verileri için sembol bilgilerini yaymaz. Ya da yalnızca iç bağlantısı olan veriler veya işlevler için. Bu iyileştirme, bağlayıcının yayın derlemelerinde veya bağlayıcı seçeneğini belirttiğinizde /OPT:REF yaptığı bazı işleri basitleştirir. Bu derleyici iyileştirmesi .obj dosya boyutunu önemli ölçüde azaltabilir ve bağlayıcı hızlarını artırabilir. İyileştirmeleri (/Od devre dışı bırakdığınızda derleyici seçeneği etkinleştirilmez. Veya belirttiğinizde /GL (Tüm Program İyileştirme).

Varsayılan olarak, komut satırı derlemelerinde bu seçenek kapalıdır (/Zc:inline-). /permissive- seçeneği etkinleştirilmez/Zc:inline. MSBuild projelerinde seçenek, varsayılan olarak Evet olarak ayarlanmış Olan C/C++Dil Yapılandırma Özellikleri>C/C++>Dil>Başvurulmayan kodu ve veriyi kaldır özelliği tarafından ayarlanır.

Belirtilirse /Zc:inline , derleyici C++11 gereksinimini zorunlu tutarak, bildirilen inline tüm işlevlerin kullanılıyorsa aynı çeviri biriminde kullanılabilir bir tanımı olması gerekir. Seçenek belirtilmediğinde, Microsoft derleyicisi tanım görünmese bile bildirilen inline işlevleri çağıran uyumsuz koda izin verir. Daha fazla bilgi için bölüm 3.2 ve bölüm 7.1.2'deki C++11 standardına bakın. Bu derleyici seçeneği Visual Studio 2013 Güncelleştirme 2'de kullanıma sunulmuştur.

seçeneğini kullanmak /Zc:inline için uyumsuz kodu güncelleştirin.

Bu örnekte, bir tanım olmadan satır içi işlev bildiriminin uyumlu olmayan kullanımının, varsayılan /Zc:inline- seçenek kullanıldığında nasıl derlenip bağlantı sağlanmaya devam etmesi gösterilmektedir:

Kaynak dosya example.h:

// example.h
// Compile by using: cl /W4 /EHsc /O2 zcinline.cpp example.cpp
#pragma once

class Example {
public:
   inline void inline_call(); // declared but not defined inline
   void normal_call();
   Example() {};
};

Kaynak dosya example.cpp:

// example.cpp
// Compile by using: cl /W4 /EHsc /O2 zcinline.cpp example.cpp
#include <stdio.h>
#include "example.h"

void Example::inline_call() {
   printf("inline_call was called.\n");
}

void Example::normal_call() {
   printf("normal_call was called.\n");
   inline_call(); // with /Zc:inline-, inline_call forced into .obj file
}

Kaynak dosya zcinline.cpp:

// zcinline.cpp
// Compile by using: cl /W4 /EHsc /O2 zcinline.cpp example.cpp
#include "example.h"

int main() {
   Example example;
   example.inline_call(); // normal call when definition unavailable
}

Etkinleştirildiğinde/Zc:inline, derleyici içinde için Example::inline_call inlined olmayan bir kod gövdesi yaymadığından aynı kod LNK2019 hatasına example.objneden olur. Eksik kod, tanımlanmamış bir dış simgeye başvurmak için inlined olmayan çağrısına main neden olur.

Bu hatayı çözmek için, anahtar sözcüğünü inline bildiriminden Example::inline_callkaldırabilir veya tanımını Example::inline_call üst bilgi dosyasına taşıyabilir veya uygulamasını Example içine main.cpptaşıyabilirsiniz. Sonraki örnek, tanımı üst bilgi dosyasına taşır; burada üst bilgiyi içeren herhangi bir arayan tarafından görülebilir.

Kaynak dosya example2.h:

// example2.h
// Compile by using: cl /W4 /EHsc /O2 zcinline2.cpp example2.cpp
#pragma once
#include <stdio.h>

class Example2 {
public:
   inline void inline_call() {
      printf("inline_call was called.\n");
   }
   void normal_call();
   Example2() {};
};

Kaynak dosya example2.cpp:

// example2.cpp
// Compile by using: cl /W4 /EHsc /O2 zcinline2.cpp example2.cpp
#include "example2.h"

void Example2::normal_call() {
   printf("normal_call was called.\n");
   inline_call();
}

Kaynak dosya zcinline2.h:

// zcinline2.cpp
// Compile by using: cl /W4 /EHsc /O2 zcinline2.cpp example2.cpp
#include "example2.h"

int main() {
   Example2 example2;
   example2.inline_call(); // normal call when definition unavailable
}

Visual C++'daki uyumluluk sorunları hakkında daha fazla bilgi için bkz . Standart dışı davranış.

Bu derleyici seçeneğini Visual Studio geliştirme ortamında ayarlamak için

  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++>Dil özellik sayfasını seçin.

  3. Başvurulmayan kodu ve verileri kaldır özelliğini değiştirip Tamam'ı seçin.

Ayrıca bkz.

/Zc (Uyumluluk)