/ ograniczająca-(standardów zgodność)/permissive- (Standards conformance)

Określ tryb zgodności standardów do kompilatora.Specify standards conformance mode to the compiler. Użyj tej opcji, aby zidentyfikować i rozwiązać problemy z zgodność w kodzie, aby umożliwić zarówno więcej poprawne i przenośną.Use this option to help you identify and fix conformance issues in your code, to make it both more correct and more portable.

SkładniaSyntax

/ ograniczająca-/permissive-

UwagiRemarks

Można użyć / ograniczająca- opcję kompilatora, aby określić zachowanie kompilatora zgodnych standardów.You can use the /permissive- compiler option to specify standards-conforming compiler behavior. Ta opcja powoduje wyłączenie ograniczająca zachowania i ustawia /Zc opcje kompilatora, aby uzyskać pełną zgodność.This option disables permissive behaviors, and sets the /Zc compiler options for strict conformance. W środowisku IDE ta opcja powoduje aparat podkreślenie niezgodnych kodu IntelliSense.In the IDE, this option also makes the IntelliSense engine underline non-conforming code.

Domyślnie / ograniczająca- opcja jest ustawiona w nowych projektach utworzone przez wersji programu Visual Studio 2017 15,5 cala i nowszych wersji.By default, the /permissive- option is set in new projects created by Visual Studio 2017 version 15.5 and later versions. Nie jest ustawiona domyślnie we wcześniejszych wersjach.It is not set by default in earlier versions. Gdy ustawiono opcję, kompilator generuje diagnostycznych błędy lub ostrzeżenia, gdy język niestandardowej konstrukcje zostaną wykryte w kodzie, w tym niektórych typowych błędów w wersji pre-C ++ 11 kodu.When the option is set, the compiler generates diagnostic errors or warnings when non-standard language constructs are detected in your code, including some common bugs in pre-C++11 code.

/ Ograniczająca- opcji jest zgodny z prawie wszystkie pliki nagłówka z najnowszą Kit systemu Windows, takich jak Software Development Kit (SDK) lub Windows Driver Kit (WDK), począwszy od systemu Windows spadek twórców SDK (10.0.16299.0).The /permissive- option is compatible with almost all of the header files from the latest Windows Kits, such as the Software Development Kit (SDK) or Windows Driver Kit (WDK), starting in the Windows Fall Creators SDK (10.0.16299.0). Starsze wersje zestawu SDK może zakończyć się niepowodzeniem do skompilowania w obszarze / ograniczająca- różne źródła kodu zgodność powodów.Older versions of the SDK may fail to compile under /permissive- for various source code conformance reasons. Kompilator i zestawy SDK wysyłki na osiach czasu inną wersję, w związku z tym istnieją problemy, pozostałe.The compiler and SDKs ship on different release timelines, therefore there are some remaining issues. Dla określonego nagłówka pliku problemów, zobacz problemy nagłówka Windows poniżej.For specific header file issues, see Windows header issues below.

/ Ograniczająca- opcję zestawy /Zc: strictstrings i /Zc: rvaluecast opcje do zachowania zgodności.The /permissive- option sets the /Zc:strictStrings and /Zc:rvalueCast options to conforming behavior. One domyślne zachowanie niezgodnych.They default to non-conforming behavior. Można przekazać określonego /Zc opcje po / ograniczająca- w wierszu polecenia, aby zmienić to zachowanie.You can pass specific /Zc options after /permissive- on the command line to override this behavior.

W wersji kompilatora, począwszy od programu Visual Studio 2017 wersji 15 ustęp 3 / ograniczająca- opcję zestawy /Zc:ternary opcji.In versions of the compiler beginning in Visual Studio 2017 version 15.3, the /permissive- option sets the /Zc:ternary option. Kompilator implementuje więcej wymagania dotyczące dwufazowego nazwę wyszukiwania.The compiler also implements more of the requirements for two-phase name look-up. Gdy / ograniczająca- jest ustawiona opcja, kompilator analizuje funkcji i klasa definicje szablonów identyfikacji nazwy zależne i zależne od innych niż używane w szablonach.When the /permissive- option is set, the compiler parses function and class template definitions, identifying dependent and non-dependent names used in the templates. W tej wersji odbywa się tylko nazwa analizy zależności.In this release, only name dependency analysis is performed.

Rozszerzenia określonego środowiska i obszary języka standardowego pozostawia do wykonania nie dotyczy / ograniczająca-.Environment-specific extensions and language areas that the standard leaves up to the implementation are not affected by /permissive-. Na przykład specyficzne dla firmy Microsoft __declspec, konwencja wywołania i wyjątków strukturalnych obsługi słów kluczowych i dyrektywy pragma specyficznych dla kompilatora lub atrybutów nie są oznaczone za pomocą kompilatora w / ograniczająca- tryb.For example, the Microsoft-specific __declspec, calling convention and structured exception handling keywords, and compiler-specific pragma directives or attributes are not flagged by the compiler in /permissive- mode.

/ Ograniczająca- opcja używa Obsługa zgodności ze standardem w bieżącej wersji kompilatora w celu określenia, które konstrukcji języka są niezgodne.The /permissive- option uses the conformance support in the current compiler version to determine which language constructs are non-conforming. Opcja nie określa, jeśli kod jest zgodny z określoną wersją C++ standard.The option does not determine if your code conforms to a specific version of the C++ standard. Aby włączyć wszystkie zaimplementowane kompilatora obsługę standardu najnowszą wersję roboczą, należy użyć /std:latest opcji.To enable all implemented compiler support for the latest draft standard, use the /std:latest option. Aby ograniczyć obsługa kompilatora do aktualnie zaimplementowana standardzie C ++ 17, użyj /std:c ++ 17 opcji.To restrict the compiler support to the currently implemented C++17 standard, use the /std:c++17 option. Aby ograniczyć obsługa kompilatora, aby lepiej dopasować 14 standardu C ++, użyj /std:c ++ 14 opcja, która jest ustawiona domyślnie.To restrict the compiler support to more closely match the C++14 standard, use the /std:c++14 option, which is the default.

Nie wszystkie C ++ 11, języka C ++ 14 lub C ++ 17 zgodnych standardów kodu jest obsługiwana przez kompilator języka Visual C++ w programie Visual Studio 2017 r.Not all C++11, C++14, or C++17 standards-conforming code is supported by the Visual C++ compiler in Visual Studio 2017. / Ograniczająca- opcji mogą nie zostać wykryte problemy dotyczące niektórych aspektów wyszukiwanie nazw dwufazowego, powiązanie z systemem innym niż stała odwołanie do tymczasowej, traktowanie init kopiowania jako bezpośrednie init, umożliwiającą wielu konwersje zdefiniowane przez użytkownika w Inicjowanie lub alternatywne tokeny dla operatorów logicznych i innych obszarach zgodność z systemem innym niż obsługiwany.The /permissive- option may not detect issues regarding some aspects of two-phase name lookup, binding a non-const reference to a temporary, treating copy init as direct init, allowing multiple user-defined conversions in initialization, or alternative tokens for logical operators, and other non-supported conformance areas. Aby uzyskać więcej informacji na temat problemów zgodności w programie Visual C++, zobacz niestandardowe zachowanie.For more information about conformance issues in Visual C++, see Nonstandard Behavior.

Jak rozwiązać koduHow to fix your code

Oto kilka przykładów kodu, który zostanie wykryte niezgodnych korzystając z / ograniczająca-, wraz z sugerowanych sposobów, aby rozwiązać problemy.Here are some examples of code that is detected as non-conforming when you use /permissive-, along with suggested ways to fix the issues.

Użyj domyślnej jako identyfikatora w kodzie natywnymUse default as an identifier in native code

void func(int default); // Error C2321: 'default' is a keyword, and
                        // cannot be used in this context

Elementy członkowskie wyszukiwania w podstawowym zależneLookup members in dependent base

template <typename T>
struct B {
    void f();
};

template <typename T>
struct D : public B<T> // B is a dependent base because its type
                       // depends on the type of T.
{
    // One possible fix is to uncomment the following line.
    // If this is a type, don't forget the 'typename' keyword.
    // using B<T>::f;

    void g() {
        f(); // error C3861: 'f': identifier not found
             // Another fix is to change it to 'this->f();'
    }
};

void h() {
    D<int> d;
    d.g();
}

Użyj nazwy kwalifikowane w deklaracji elementu członkowskiegoUse of qualified names in member declarations

struct A {
    void A::f() { } // error C4596: illegal qualified name in member
                    // declaration.
                    // Remove redundant 'A::' to fix.
};

Inicjowanie wielu elementów członkowskich Unii w inicjatorze elementu członkowskiegoInitialize multiple union members in a member initializer

union U
{
    U()
        : i(1), j(1) // error C3442: Initializing multiple members of
                     // union: 'U::i' and 'U::j'.
                     // Remove all but one of the initializations to fix.
    {}
    int i;
    int j;
};

Ukryte przyjazne nazwy wyszukiwania regułHidden friend name lookup rules

// Example 1
struct S {
    friend void f(S *);
};
// Uncomment this declaration to make the hidden friend visible:
// void f(S *); // This declaration makes the hidden friend visible

using type = void (*)(S *);
type p = &f; // error C2065: 'f': undeclared identifier.
// Example 2
struct S {
    friend void f(S *);
};
void g() {
    // Using nullptr instead of S prevents argument dependent lookup in S
    f(nullptr); // error C3861: 'f': identifier not found

    S *p = nullptr;
    f(S); // Hidden friend now found via argument-dependent lookup.
}

Użyj wyliczenia w zakresie w granice tablicyUse scoped enums in array bounds

enum class Color {
    Red, Green, Blue
};

int data[Color::Blue]; // error C3411: 'Color' is not valid as the size
                       // of an array as it is not an integer type.
                       // Cast to type size_t or int to fix.

Użyj dla każdej z nich w kodzie natywnymUse for each in native code

void func() {
    int array[] = {1, 2, 30, 40};
    for each (int i in array) // error C4496: nonstandard extension
                              // 'for each' used: replace with
                              // ranged-for statement:
                              // for (int i: array)
    {
        // ...
    }
}

Korzystanie z atrybutów ATLUse of ATL Attributes

// Example 1
[uuid("594382D9-44B0-461A-8DE3-E06A3E73C5EB")]
class A {};
// Fix for example 1
class __declspec(uuid("594382D9-44B0-461A-8DE3-E06A3E73C5EB")) B {};
// Example 2
[emitidl];
[module(name="Foo")];

[object, local, uuid("9e66a290-4365-11d2-a997-00c04fa37ddb")]
__interface ICustom {
    HRESULT Custom([in] longl, [out, retval] long*pLong);
    [local] HRESULT CustomLocal([in] longl, [out, retval] long*pLong);
};

[coclass, appobject, uuid("9e66a294-4365-11d2-a997-00c04fa37ddb")]
class CFoo : public ICustom
{};
// Fix for example 2
// First, create the *.idl file. The vc140.idl generated file can be 
// used to automatically obtain a *.idl file for the interfaces with 
// annotation. Second, add a midl step to your build system to make 
// sure that the C++ interface definitions are outputted. 
// Last, adjust your existing code to use ATL directly as shown in 
// the atl implementation section.

-- IDL  FILE--
import "docobj.idl";

[object, local, uuid(9e66a290-4365-11d2-a997-00c04fa37ddb)]
interface ICustom : IUnknown {
    HRESULT Custom([in] longl, [out,retval] long*pLong);
    [local] HRESULT CustomLocal([in] longl, [out,retval] long*pLong);
};

[ version(1.0), uuid(29079a2c-5f3f-3325-99a1-3ec9c40988bb) ]
library Foo {
    importlib("stdole2.tlb");
    importlib("olepro32.dll");

    [version(1.0), appobject, uuid(9e66a294-4365-11d2-a997-00c04fa37ddb)]
    coclass CFoo { interface ICustom; };
}

-- ATL IMPLEMENTATION--
#include <idl.header.h>
#include <atlbase.h>

class ATL_NO_VTABLE CFooImpl : public ICustom,
    public ATL::CComObjectRootEx<CComMultiThreadModel>
{
    public:BEGIN_COM_MAP(CFooImpl)
    COM_INTERFACE_ENTRY(ICustom)
    END_COM_MAP()
};

Niejednoznaczny operator warunkowy argumentówAmbiguous conditional operator arguments

W wersjach kompilatora przed Visual Studio 2017 wersji 15 ustęp 3, kompilator zaakceptowane argumenty operator warunkowy (lub trójargumentowy) ?: uznane niejednoznaczne przez Standard.In versions of the compiler before Visual Studio 2017 version 15.3, the compiler accepted arguments to the conditional operator (or ternary operator) ?: that are considered ambiguous by the Standard. W / ograniczająca- trybie kompilator generuje teraz co najmniej jeden diagnostyki w przypadkach, w których skompilowany bez diagnostyki we wcześniejszych wersjach.In /permissive- mode, the compiler now issues one or more diagnostics in cases that compiled without diagnostics in earlier versions.

Typowych błędów, które mogą być wynikiem tej zmiany obejmują:Commmon errors that may result from this change include:

  • Błąd C2593: "operator"?error C2593: 'operator ?' jest niejednoznacznyis ambiguous

  • Błąd C2679: binarny '?': nie znaleziono żadnych operatora, który przyjmuje prawostronny operand typu "B" (lub nie jest dopuszczalne konwersja)error C2679: binary '?': no operator found which takes a right-hand operand of type 'B' (or there is no acceptable conversion)

  • Błąd C2678: binarny '?': nie znaleziono żadnych operatora, który przyjmuje lewostronny operand typu "A" (lub nie jest dopuszczalne konwersja)error C2678: binary '?': no operator found which takes a left-hand operand of type 'A' (or there is no acceptable conversion)

  • Błąd C2446: ":": Brak konwersji z "B" na "A"error C2446: ':': no conversion from 'B' to 'A'

Wzorzec typowy kod, który może być przyczyną tego problemu jest niektóre klasy C zapewniał i niejawnego konstruktora z innego typu T i operator niejawnej konwersji do typu T. W takim przypadku zarówno konwersja 2 argumentu typu 3rd i konwersji argumentu 3 na typ 2 są prawidłowe konwersje niejednoznacznego zgodnie ze standardowego.A typical code pattern that can cause this issue is when some class C provides both a non-explicit constructor from another type T and a non-explicit conversion operator to type T. In this case, both the conversion of the 2nd argument to the type of the 3rd and the conversion of the 3rd argument to the type of the 2nd are valid conversions, which is ambiguous according to the standard.

// Example 1: class that provides conversion to and initialization from some type T
struct A
{
    A(int);
    operator int() const;
};

extern bool cond;

A a(42);
// Accepted when /Zc:ternary or /permissive- is not used:
auto x = cond ? 7 : a; // A: permissive behavior prefers A(7) over (int)a
// Accepted always:
auto y = cond ? 7 : int(a);
auto z = cond ? A(7) : a;

Jeśli T reprezentuje jeden z typów zerem ciągu jest wyjątek ważne tego wspólnego wzorca (na przykład const char *, const char16_t *i tak dalej) i rzeczywisty argument ?: jest ciągiem literału odpowiedniego typu.There is an important exception to this common pattern when T represents one of the null-terminated string types (for example, const char *, const char16_t *, and so on) and the actual argument to ?: is a string literal of corresponding type. C ++ 17 zmieniła semantykę języka C ++ 14.C++17 has changed semantics from C++14. W związku z tym kod w przykładzie 2 jest akceptowany w obszarze /std:c ++ 14 i odrzucone w obszarze /std:c ++ 17 podczas /Zc:ternary lub /permissive-jest używany.As a result, the code in example 2 is accepted under /std:c++14 and rejected under /std:c++17 when /Zc:ternary or /permissive- is used.

// Example 2: exception from the above
struct MyString
{
    MyString(const char* s = "") noexcept;  // from char*
    operator const char* () const noexcept; //   to char*
};

extern bool cond;

MyString s; 
// Using /std:c++14, /permissive- or /Zc:ternary behavior
// is to prefer MyString("A") over (const char*)s
// but under /std:c++17 this line causes error C2445:
auto x = cond ? "A" : s;
// You can use a static_cast to resolve the ambiguity:
auto y = cond ? "A" : static_cast<const char*>(s);

Inny przypadek, w której mogą zostać wyświetlone błędy trwa operatorów warunkowych z jednym argumentem typu void.Another case where you may see errors is in conditional operators with one argument of type void. Ten przypadek może być typowe w przypadku makra przypominającej potwierdzenia.This case may be common in ASSERT-like macros.

// Example 3: void arguments
void myassert(const char* text, const char* file, int line);
// Accepted when /Zc:ternary or /permissive- is not used:
#define ASSERT_A(ex) (void)((ex) ? 1 : myassert(#ex, __FILE__, __LINE__))
// Accepted always:
#define ASSERT_B(ex) (void)((ex) ? void() : myassert(#ex, __FILE__, __LINE__))

Mogą również zostać wyświetlone błędy w szablonie metaprogramowania, których typy wyników operator warunkowy mogą ulec zmianie w obszarze /Zc:ternary i / ograniczająca-.You may also see errors in template metaprogramming, where conditional operator result types may change under /Zc:ternary and /permissive-. Jednym ze sposobów rozwiązania tego problemu jest użycie std::remove_reference na wynikowy typ.One way to resolve this issue is to use std::remove_reference on the resulting type.

// Example 4: different result types 
extern bool cond;
extern int count;
char  a = 'A'; 
const char  b = 'B'; 
decltype(auto) x = cond ? a : b; // char without, const char& with /Zc:ternary 
const char (&z)[2] = count > 3 ? "A" : "B"; // const char* without /Zc:ternary 

Sprawdź nazwę dwufazowego (częściowe)Two-phase name look up (partial)

Gdy / ograniczająca- opcja jest ustawiona w Visual Studio 2017 wersji 15 ustęp 3, kompilator analizuje funkcji i klasa definicje szablonów identyfikacji nazwy zależne i zależne od innych niż używane w szablonach zgodnie z wymaganiami dla nazwy dwufazowego wyszukiwania.When the /permissive- option is set in Visual Studio 2017 version 15.3, the compiler parses function and class template definitions, identifying dependent and non-dependent names used in templates as required for two-phase name look-up. W tej wersji odbywa się tylko nazwa analizy zależności.In this release, only name dependency analysis is performed. W szczególności z systemem innym niż zależne od nazw, które nie są zadeklarowane w kontekście definicji szablonu spowodować diagnostycznych komunikatu jako wymaganego normy ISO C++.In particular, non-dependent names that are not declared in the context of a template definition cause a diagnostic message as required by the ISO C++ standards. Jednak powiązania z systemem innym niż zależne od nazw, które wymaga argumentu zależnych wyszukiwanie w kontekście definicji nie została wykonana.However, binding of non-dependent names that require argument dependent look up in the definition context is not done.

// dependent base
struct B {
    void g();
};

template<typename T>
struct D : T {
    void f() {
        // The call to g was incorrectly allowed in VS2017:
        g();  // Now under /permissive-: C3861
        // Possible fixes:
        // this->g();
        // T::g();
    }
};

int main()
{
    D<B> d;
    d.f();
}

Problemy z nagłówka systemu WindowsWindows header issues

/ Ograniczająca- opcji jest zbyt restrykcyjny wersji zestawów Windows przed Windows spadek twórców aktualizacji SDK (10.0.16299.0) lub wersji systemu Windows Driver Kit (WDK) 1709.The /permissive- option is too strict for versions of the Windows Kits before Windows Fall Creators Update SDK (10.0.16299.0), or the Windows Driver Kit (WDK) version 1709. Firma Microsoft zaleca, zaktualizuj do najnowszej wersji zestawów Windows, aby można było używać / ograniczająca- w kodzie sterowników systemu Windows lub urządzenia.We recommend you update to the latest versions of the Windows Kits in order to use /permissive- in your Windows or device driver code.

Niektóre pliki nagłówkowe Windows spadek twórców aktualizacji SDK (10.0.16299.0) lub Windows Driver Kit (WDK) 1709, nadal mieć problemy, które były niezgodne z użyciem / ograniczająca-.Certain header files in the Windows Fall Creators Update SDK (10.0.16299.0), or the Windows Driver Kit (WDK) 1709, still have issues that make them incompatible with use of /permissive-. Aby obejść ten problem, zaleca się ograniczyć stosowanie tych nagłówków można tylko te pliki kodu źródłowego, które wymagają i Usuń / ograniczająca- podczas kompilowania dla tych plików źródłowych określonego kodu.To work around these issues, we recommend you restrict the use of these headers to only those source code files that require them, and remove the /permissive- option when you compile those specific source code files. Następujące problemy są specyficzne dla systemu Windows spadek twórców aktualizacji SDK (10.0.16299.0):The following issues are specific to the Windows Fall Creators Update SDK (10.0.16299.0):

Problem z programu um\Query.hIssue in um\Query.h

Korzystając z / ograniczająca- przełącznika kompilatora tagRESTRICTION struktury nie kompiluje się ze względu na element członkowski case(RTOr) "lub".When using the /permissive- compiler switch, the tagRESTRICTION structure does not compile due to the case(RTOr) member 'or'.

struct tagRESTRICTION
    {
    ULONG rt;
    ULONG weight;
    /* [switch_is][switch_type] */ union _URes
        {
        /* [case()] */ NODERESTRICTION ar;
        /* [case()] */ NODERESTRICTION or;  // error C2059: syntax error: '||'
        /* [case()] */ NODERESTRICTION pxr;
        /* [case()] */ VECTORRESTRICTION vr;
        /* [case()] */ NOTRESTRICTION nr;
        /* [case()] */ CONTENTRESTRICTION cr;
        /* [case()] */ NATLANGUAGERESTRICTION nlr;
        /* [case()] */ PROPERTYRESTRICTION pr;
        /* [default] */  /* Empty union arm */
        } res;
    };

Aby rozwiązać ten problem, skompiluj plików zawierających Query.h bez / ograniczająca- opcji.To address this issue, compile files that include Query.h without the /permissive- option.

Problem z programu um\cellularapi_oem.hIssue in um\cellularapi_oem.h

Korzystając z / ograniczająca- przełącznika kompilatora, deklaracja przekazująca dalej enum UICCDATASTOREACCESSMODE powoduje, że ostrzeżenia:When using the /permissive- compiler switch, the forward declaration of enum UICCDATASTOREACCESSMODE causes a warning:

typedef enum UICCDATASTOREACCESSMODE UICCDATASTOREACCESSMODE; // C4471

Deklaracja przekazana wyliczenia niewystępującego w zakresie to rozszerzenie firmy Microsoft.The forward declaration of unscoped enum is a Microsoft extension. Aby rozwiązać ten problem, skompiluj plików zawierających cellularapi_oem.h bez / ograniczająca- opcji lub użyj /wd opcja o wyłączeniu ostrzeżenie C4471.To address this issue, compile files that include cellularapi_oem.h without the /permissive- option, or use the /wd option to silence warning C4471.

Problem z programu um\omscript.hIssue in um\omscript.h

W języku C ++ 03, konwersja z literału ciągu znaków na BSTR (który jest typem typedef do "wchar_t *") jest przestarzały, ale dozwolone.In C++03, a conversion from a string literal to BSTR (which is a typedef to 'wchar_t *') is deprecated but allowed. W języku C ++ 11 konwersja nie jest dozwolony.In C++11, the conversion is no longer allowed.

virtual /* [id] */ HRESULT STDMETHODCALLTYPE setExpression(
    /* [in] */ __RPC__in BSTR propname,
    /* [in] */ __RPC__in BSTR expression,
    /* [in][defaultvalue] */ __RPC__in BSTR language = L"") = 0; // C2440

Aby rozwiązać ten problem, skompiluj plików zawierających omscript.h bez / ograniczająca- opcji lub użyj /Zc:strictStrings- zamiast tego.To address this issue, compile files that include omscript.h without the /permissive- option, or use /Zc:strictStrings- instead.

Aby ustawić tę opcję kompilatora w środowisku programowania Visual StudioTo set this compiler option in the Visual Studio development environment

W wersji Visual Studio 2017 15,5 cala i nowszych wersji wykonaj następującą procedurę:In Visual Studio 2017 version 15.5 and later versions, use this procedure:

  1. Otwórz projekt w strony właściwości okno dialogowe.Open your project's Property Pages dialog box.

  2. W obszarze właściwości konfiguracji, rozwiń węzeł C/C++ folder i wybierz polecenie języka strony właściwości.Under Configuration Properties, expand the C/C++ folder and choose the Language property page.

  3. Zmień tryb zgodności wartości właściwości do tak (/ ograniczająca —).Change the Conformance mode property value to Yes (/permissive-). Wybierz OK lub Zastosuj Aby zapisać zmiany.Choose OK or Apply to save your changes.

W wersjach przed Visual Studio 2017 wersji 15,5 cala wykonaj następującą procedurę:In versions before Visual Studio 2017 version 15.5, use this procedure:

  1. Otwórz projekt w strony właściwości okno dialogowe.Open your project's Property Pages dialog box.

  2. W obszarze właściwości konfiguracji, rozwiń węzeł C/C++ folder i wybierz polecenie wiersza polecenia strony właściwości.Under Configuration Properties, expand the C/C++ folder and choose the Command Line property page.

  3. Wprowadź / ograniczająca- w — opcja kompilatora dodatkowe opcje pole.Enter the /permissive- compiler option in the Additional Options box. Wybierz OK lub Zastosuj Aby zapisać zmiany.Choose OK or Apply to save your changes.

Aby programowo ustawić tę opcję kompilatoraTo set this compiler option programmatically

  • Zobacz <xref:Microsoft.VisualStudio.VCProjectEngine.VCCLCompilerTool.AdditionalOptions%2A>.See <xref:Microsoft.VisualStudio.VCProjectEngine.VCCLCompilerTool.AdditionalOptions%2A>.

Zobacz takżeSee also

Opcje kompilatora Compiler Options
Ustawianie opcji kompilatoraSetting Compiler Options