Sdílet prostřednictvím


/Zc:inline (Odebrat neodkazované sekvence COMDAT)

Odebere, na které neexistuje odkaz funkce nebo data, která jsou COMDATs nebo mít pouze interní navázání.Při /Zc:inline není zadán, kompilátor vyžaduje překlad jednotkách, které pomocí vložených dat nebo vložených funkcí musí obsahovat také definice pro data nebo funkce.

/Zc:inline[-]

Poznámky

Při /Zc:inline není zadán, kompilátor není generuje symbol informace, na které neexistuje odkaz funkce COMDAT nebo data, nebo pro funkce nebo data, která mají pouze interní navázání.Tato možnost je ve výchozím nastavení vypnuto (/Zc:inline-).Tato optimalizace zjednodušuje některé úlohy prováděné na základě propojovací ve verzi sestavení nebo kdy propojovacího /OPT:REF je zadán.Když kompilátor provede tato optimalizace, může výrazně zmenšit velikost souboru .obj a zlepšení rychlosti propojovacího programu.Této možnosti kompilátoru není povolena, pokud jsou zakázána optimalizace (/Od) nebo při /GL (celková optimalizace programu) je zadán.

Pokud /Zc:inline není zadán, kompilátor vynucuje C ++ 11 požadavek, aby všechny funkce deklarované inline musí mít k dispozici ve stejné jednotce překlad definici, pokud jsou používány.Pokud není zadán parametr, Visual C++ umožňuje normami kódu, který volá funkce deklarované inline i když je viditelná žádná definice.Další informace naleznete v tématu C ++ 11 standard, v 3.2 a oddílu 7.1.2.Tato možnost kompilátoru byla zavedena v aktualizaci Visual Studio 2013 Update 2.

Chcete-li použít /Zc:inline možnost aktualizace nekompatibilní kód.Tento příklad ukazuje, jak nekompatibilní použití deklarace vložené funkce bez definice stále kompiluje a odkazy, když ve výchozím nastavení /Zc:inline- možnost se používá:

// 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
}

Při /Zc:inline je povolen, stejný kód příčiny LNK2019 chyba, vzhledem k tomu, že kompilátor není vydávání-vložená kód těla pro Example::inline_call v example.obj.To způsobí, že-vložená volání v main k odkazování symbol nedefinovaný externí.

Pro vyřešení této chyby, můžete odebrat inline klíčové slovo z prohlášení o Example::inline_call, přesunout definici Example::inline_call do hlavičky souboru nebo přesuňte provádění Example do main.cpp.Další příklad definice přesune do souboru hlaviček, kde je viditelná pro všechny volající, který obsahuje záhlaví.

// 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
}

Další informace o problémech shody v jazyce Visual C++ naleznete v tématu Nestandardní chování.

Nastavení tohoto parametru kompilátoru ve vývojovém prostředí Visual Studio

  1. Otevřete dialogové okno Stránky vlastností svého projektu.Podrobnosti naleznete v tématu Práce s vlastnostmi projektu.

  2. Vyberte C/C++ složky.

  3. Vyberte stránku vlastností Příkazový řádek.

  4. Změnit další možnosti vlastnost, aby zahrnovala /Zc:inline a poté zvolte možnost OK.

Viz také

Referenční dokumentace

/Zc (shoda)