/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.obj
neden 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_call
kaldırabilir veya tanımını Example::inline_call
üst bilgi dosyasına taşıyabilir veya uygulamasını Example
içine main.cpp
taşı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
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++>Dil özellik sayfasını seçin.
Başvurulmayan kodu ve verileri kaldır özelliğini değiştirip Tamam'ı seçin.