Udostępnij za pośrednictwem


/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

  1. Otwórz okno dialogowe projektu Strony właściwości.Szczegółowe informacje – zobacz: Praca z właściwościami projektu.

  2. Wybierz C/C++ folder.

  3. Wybierz stronę właściwości Wiersz polecenia.

  4. Modyfikuj dodatkowe opcje właściwości do włączenia /Zc:inline , a następnie wybierz OK.

Zobacz też

Informacje

/Zc (Zgodność)