/Zc:inline (usuwanie nieużywanej sekcji COMDAT)
Usuwa nieużywane funkcje lub dane, które są COMDATs lub mieć tylko wewnętrzne powiązania.Gdy /Zc:inline jest określony, kompilator wymaga tłumaczenia jednostek, korzystających z wbudowanego danych lub wbudowane funkcje musi również obejmować definicje danych lub funkcji.
/Zc:inline[-]
Uwagi
Gdy /Zc:inline jest określony, kompilator nie emitować symbol informacje dotyczące nieużywane funkcji COMDAT lub danych, lub funkcji lub dane, które mają tylko wewnętrzne powiązania.Domyślnie ta opcja jest wyłączona (/Zc:inline-).Optymalizacja upraszcza niektórych pracy wykonanej przez program łączący w wersji kompilacje lub jeśli opcja Łączenie /OPT:REF jest określony.Gdy kompilator wykona Optymalizacja, może znacznie zmniejszyć rozmiar pliku .obj i zwiększenia szybkości łączenie.Ta opcja kompilatora nie jest włączona podczas optymalizacji są wyłączone (wszystkie) lub gdy /GL (Optymalizacja całego programu) jest określony.
Jeśli /Zc:inline jest określony, kompilator wymusza C ++ 11 konieczność zgłoszonego przez wszystkie funkcje inline muszą być dostępne w tej samej jednostki translacji definicji, jeśli są one używane.Jeśli opcja nie zostanie określona, Visual C++ umożliwia bez zgodność kod, który wywołuje funkcje zadeklarowany inline nawet, jeśli brak definicji jest widoczna.Aby uzyskać więcej informacji zobacz C ++ 11 standard, w 3.2 i sekcji 7.1.2.Ta opcja kompilatora wprowadzono w programie Visual Studio 2013 Update 2.
Aby użyć /Zc:inline opcji niezgodny kod aktualizacji.Ten przykład pokazuje, jak niezgodnych użyj deklaracji funkcji tekście bez definicji nadal kompiluje i łączy, gdy wartość domyślna /Zc:inline- jest używana opcja:
// 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() {};
};
// 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
}
// zcinline.cpp
// Compile by using: cl /W4 /EHsc /O2 zcinline.cpp example.cpp
#include "example.h"
void main() {
Example example;
example.inline_call(); // normal call when definition unavailable
}
Gdy /Zc:inline jest włączone, taki sam kod przyczyny LNK2019 błędów, ponieważ kompilator nie emitować jednostkę-inlined kodu dla Example::inline_call w example.obj.Powoduje to wywołanie inlined w main do odwołania Niezdefiniowany symbol zewnętrznych.
Aby rozwiązać ten problem, można usunąć inline słowo kluczowe z deklaracji Example::inline_call, Przenieś definicji Example::inline_call do nagłówka pliku lub Przenieś implementacji Example do main.cpp.Następny przykład przenosi definicji do nagłówka pliku, gdzie jest widoczny dla każdego obiektu wywołującego, który zawiera nagłówek.
// 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() {};
};
// 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();
}
// zcinline2.cpp
// Compile by using: cl /W4 /EHsc /O2 zcinline2.cpp example2.cpp
#include "example2.h"
void main() {
Example2 example2;
example2.inline_call(); // normal call when definition unavailable
}
Aby uzyskać więcej informacji dotyczących zgodności w programie Visual C++, zobacz Niestandardowe zachowanie.
Aby ustawić tę opcję kompilatora w środowisku programowania Visual Studio
Otwórz okno dialogowe projektu Strony właściwości.Szczegółowe informacje – zobacz: Praca z właściwościami projektu.
Wybierz C/C++ folder.
Wybierz stronę właściwości Wiersz polecenia.
Modyfikuj dodatkowe opcje właściwości do włączenia /Zc:inline , a następnie wybierz OK.