Sdílet prostřednictvím


Chyby a upozornění preprocesoru

Kompilátor generuje následující chyby pro nesprávné použití direktiv preprocesoru:

  • CS1024: Očekává se direktiva preprocesoru
  • CS1025: Je očekáván jednořádkový komentář nebo koncový znak řádku
  • CS1027: očekává se direktiva #endif
  • CS1028: Neočekávaná direktiva preprocesoru
  • CS1029: #error: text
  • CS1030: #warning: text
  • CS1032: Po prvním tokenu v souboru nelze definovat nebo nedefinovat symboly preprocesoru
  • CS1038: očekává se direktiva #endregion
  • CS1040: Direktivy preprocesoru musí být na řádku zobrazeny jako první znak bez prázdného znaku.
  • CS1517: Neplatný výraz preprocesoru
  • CS1560: Neplatný název souboru zadaný pro direktivu preprocesoru. Název souboru je příliš dlouhý nebo není platný název souboru.
  • CS1576: Číslo řádku zadané pro direktivu #line chybí nebo je neplatné
  • CS1578: Název souboru, jednořádkový komentář nebo očekávaný konec řádku
  • CS1633: Nerozpoznaná direktiva #pragma
  • CS1634: Očekávané zakázání nebo obnovení
  • CS1635: Nejde obnovit upozornění "kód upozornění", protože byl globálně zakázaný
  • CS1691: Číslo není platné číslo upozornění
  • CS1692: Neplatné číslo
  • CS1694: Neplatný název souboru zadaný pro direktivu preprocesoru Název souboru je příliš dlouhý nebo není platný název souboru.
  • CS1695: Neplatná syntaxe #pragma checksum; měla by být ve formátu #pragma checksum "název_souboru" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..."
  • CS1696: Očekává se jednořádkový komentář nebo konec řádku
  • CS1709: Název souboru zadaný pro direktivu preprocesoru je prázdný
  • CS7009: Nelze použít #r po prvním tokenu v souboru
  • CS7010: Očekávaný název souboru v uvozovkách
  • CS7011: #r je povolen pouze ve skriptech
  • CS8097: #load je povolen pouze ve skriptech
  • CS8098: Nelze použít #load po prvním tokenu v souboru
  • CS8938: Hodnota direktivy #line chybí nebo je mimo rozsah
  • CS8939: Koncová pozice direktivy #line musí být větší nebo rovna počáteční pozici.
  • CS8996: Surové řetězcové literály nejsou povoleny ve direktivách preprocesoru
  • CS9028: Direktiva #line span vyžaduje mezeru před první závorku, před posunem znaku a před názvem souboru.
  • CS9297: #: Direktivy nemohou být za prvním tokenem v souboru
  • CS9298: #: Direktivy lze použít pouze v souborových programech (-features:FileBasedProgram)
  • CS9299: #: direktivy nemohou být za #if direktivou
  • CS9314: #! Direktivy lze použít pouze ve skriptech nebo souborových programech.

Neplatná syntaxe direktivy preprocesoru

  • CS1024: Očekává se direktiva preprocesoru
  • CS1025: Očekáván jednořádkový komentář nebo konec řádku
  • CS1027: očekává se direktiva #endif
  • CS1028: Neočekávaná direktiva preprocesoru
  • CS1038: očekává se direktiva #endregion
  • CS1040: Direktivy preprocesoru musí být na řádku zobrazeny jako první znak bez prázdného znaku.
  • CS1517: Neplatný výraz preprocesoru
  • CS1633: Nerozpoznaná direktiva #pragma
  • CS1696: Očekává se jednořádkový komentář nebo konec řádku
  • CS8996: Nezpracované řetězcové literály nejsou povoleny ve direktivách preprocesoru

Tyto chyby značí, že jste pro direktivy preprocesoru použili neplatnou syntaxi. Mezi obvyklé příčiny patří:

  • Použití nerozpoznané direktivy po # (CS1024, CS1633).
  • Zahrnutí víceřádkových komentářů k řádkům direktiv (CS1025, CS1696).
  • Použití příkazů v neočekávaných umístěních (CS1028)
  • Chybí požadované odpovídající direktivy (CS1027, CS1038).
  • Nedefinujte nebo zrušte definici symbolů jako první token v souboru (CS1032).
  • Neumístění direktivy jako první token na začátek řádku (CS1040).
  • Použití neplatných výrazů v podmíněné kompilaci (CS1517)
  • Použití nezpracovaných řetězcových literálů ve direktivách preprocesoru (CS8996).

Příklad CS1024 – Očekává se direktiva preprocesoru:

#import System   // CS1024 - "import" is not a valid directive

Příklad CS1025 – jednořádkový komentář nebo očekávaný konec řádku:

#if true /* hello  
*/   // CS1025 - multiline comment not allowed
#endif

Příklad CS1027 – očekává se direktiva #endif:

#if true   // CS1027 - missing #endif
class Test { }

Příklad CS1028 – Neočekávaná direktiva preprocesoru:

#endif   // CS1028 - no matching #if

Příklad CS1032 – #define a #undef direktivy preprocesoru musí být uvedeny před jinými tokeny:

/* Comment */ 
#define X   // CS1032 - directive not first token in file

Příklad CS1038 – očekává se direktiva #endregion:

#region testing
class Test { }
// CS1038 - missing #endregion

Příklad CS1040 – Direktivy preprocesoru musí být prvním znakem, který není mezerou:

/* Comment */ #define X   // CS1040 - directive not first on line

Příklad CS1517 – Neplatný výraz preprocesoru:

#if 1           // CS1517 - numeric literals not allowed
#endif
#if ~symbol     // CS1517 - bitwise operators not allowed  
#endif

Příklad CS1633 – nerozpoznaná direktiva #pragma:

#pragma unknown  // CS1633 - "unknown" is not a valid pragma

Příklad CS8996 – Nezpracované řetězcové literály nejsou povoleny ve direktivách preprocesoru:

// CS8996.cs
#pragma checksum """raw_string""" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "hash"  // CS8996
class Test { }

Pokud chcete tuto chybu opravit, použijte běžný řetězcový literál:

#pragma checksum "filename.cs" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "hash"  // OK
class Test { }

Pokud chcete tyto chyby opravit, ujistěte se, že direktivy preprocesoru dodržují správná pravidla syntaxe popsaná v dokumentaci direktiv preprocesoru.

chyby direktiv #error a #warning

  • CS1029: #error: text
  • CS1030: #warning: text
  • CS1634: Je očekáváno zakázání nebo obnovení
  • CS1635: Nejde obnovit upozornění "kód upozornění", protože byl globálně zakázaný
  • CS1691: Číslo není platné číslo upozornění
  • CS1692: Neplatné číslo

K těmto chybám dochází, když kompilátor zpracovává #error, #warninga #pragma warning direktivy. Tyto direktivy umožňují generovat vlastní chybové a upozorňující zprávy během kompilace a řízení chování upozornění.

CS1029 zobrazí text chyby definované direktivou #error :

// CS1029.cs
class Sample
{
   static void Main()
   {
      #error Let's give an error here   // CS1029
   }
}

Kompilace vytvoří následující výstup:

example.cs(9,8): error CS1029: #error: 'Let's give an error here   // CS1029  '

CS1030 zobrazí text upozornění definovaného direktivou #warning :

// CS1030.cs
class Sample
{
   static void Main()
   {
      #warning Let's give a warning here
   }
}

Kompilace vytvoří následující výstup:

example.cs(6,16): warning CS1030: #warning: 'Let's give a warning here'

CS1634 nastane, když #pragma warning klauzule není správně vytvořena, například když chybí klíčová slova jako zakázat nebo obnovit.

// CS1634.cs
// compile with: /W:1

#pragma warning   // CS1634
// Try this instead:
// #pragma warning disable 0219

class MyClass
{
  public static void Main()
  {
  }
}

CS1635 dochází, když použijete možnost /nowarn příkazového řádku nebo nastavení projektu k zakázání varování globálně, ale použijete #pragma warning restore k pokusu o obnovení tohoto varování.

// CS1635.cs
// compile with: /w:1 /nowarn:162

enum MyEnum {one=1,two=2,three=3};

class MyClass
{
    public static void Main()
    {
#pragma warning disable 162

    if (MyEnum.three == MyEnum.two)
        System.Console.WriteLine("Duplicate");

#pragma warning restore 162  // CS1635
    }
}

CS1691 nastane, když číslo předané direktivě #pragma warning není platné číslo upozornění:

// CS1691.cs
public class C
{
    int i = 1;
    public static void Main()
    {
        C myC = new C();
#pragma warning disable 151  // CS1691
// Try the following line instead:
// #pragma warning disable 1645
        myC.i++;
#pragma warning restore 151  // CS1691
// Try the following line instead:
// #pragma warning restore 1645
    }
}

CS1692 nastane, když číslo v direktivách preprocesoru jako #pragma a #line je neplatné, protože je příliš velké, v nesprávném formátu nebo obsahuje neplatné znaky:

// CS1692.cs

#pragma warning disable a  // CS1692
// Try this instead:
// #pragma warning disable 1691

class A
{
    static void Main()
    {
    }
}

Tyto direktivy jsou užitečné pro scénáře podmíněné kompilace, kdy chcete vývojářům upozorňovat na konkrétní podmínky v kódu nebo řídit, která upozornění se během kompilace zobrazují. Další informace o použití těchto direktiv naleznete v dokumentaci k direktivám preprocesoru a #pragma upozornění.

#line chyby direktiv souborů

  • CS1560: Neplatný název souboru zadaný pro direktivu preprocesoru. Název souboru je příliš dlouhý nebo není platný název souboru.
  • CS1576: Číslo řádku zadané pro direktivu #line chybí nebo je neplatné
  • CS1578: Název souboru, jednořádkový komentář nebo očekávaný konec řádku
  • CS1694: Neplatný název souboru zadaný pro direktivu preprocesoru Název souboru je příliš dlouhý nebo není platný název souboru.
  • CS1695: Neplatná syntaxe #pragma checksum; měla by být #pragma checksum "název_souboru" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..."
  • CS1709: Název souboru zadaný pro direktivu preprocesoru je prázdný
  • CS8938: Hodnota direktivy #line chybí nebo je mimo rozsah
  • CS8939: Koncová pozice direktivy #line musí být větší nebo rovna počáteční pozici.
  • CS9028: Direktiva #line span vyžaduje mezeru před první závorku, před posunem znaku a před názvem souboru.

Tyto chyby značí nesprávné použití #line direktivy nebo direktiv preprocesoru souvisejících se soubory. Mezi obvyklé příčiny patří:

  • Neplatné nebo chybějící názvy souborů (CS1560, CS1694, CS1709).
  • Nesprávný formát čísla řádku nebo hodnoty (CS1576, CS8938, CS8939).
  • Chybí správná syntaxe názvů souborů a komentářů (CS1578).
  • Chybně formátovaná #pragma checksum syntaxe (CS1695).
  • Nesprávné mezery v pokynech #line span (CS9028).

Příklad CS1560/CS1694 – Zadaný neplatný název souboru:

#line 100 "MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890.txt"   // CS1560/CS1694 - filename too long

Příklad CS1576 – Číslo řádku chybí nebo je neplatné:

#line "abc.sc"         // CS1576 - missing line number
#line abc "file.cs"    // CS1576 - invalid line number format

Příklad CS1578 – Očekávaný název souboru, komentář nebo konec řádku:

#line 101 abc.cs   // CS1578 - filename not quoted

Příklad CS1695 – Neplatná syntaxe kontrolního součtu #pragma:

#pragma checksum "12345"  // CS1695 - missing GUID and checksum

Příklad CS1709 – Prázdný název souboru:

#pragma checksum "" "{406EA660-64CF-4C82-B6F0-42D48172A799}" ""  // CS1709 - empty filename

Příklad CS8938 – hodnota direktivy #line chybí nebo je mimo rozsah:

#line   // CS8938 - missing value
#line 0  // CS8938 - out of range (must be 1-16,707,566)

Příklad CS8939 – chyba koncové pozice #line:

#line (1, 10) - (1, 5) "file.cs"  // CS8939 - end column < start column

Příklad CS9028 – #line mezery direktivy span:

#line(1, 1) - (1, 10)"file.cs"  // CS9028 - missing spaces

Pokud chcete tyto chyby opravit, ujistěte se, že direktivy #line preprocesoru a direktivy preprocesoru související se soubory dodržují správnou syntaxi, jak je popsáno v dokumentaci direktiv preprocesoru.

Nesprávné použití direktiv aplikací založených na souborech

  • CS9297: #: Direktivy nemohou být za prvním tokenem v souboru
  • CS9298: #: Direktivy lze použít pouze v souborových programech (-features:FileBasedProgram)
  • CS9299: #: direktivy nemohou být za #if direktivou
  • CS9314: #! Direktivy lze použít pouze ve skriptech nebo souborových programech.

Tyto chyby značí, že jste nesprávně použili direktivy #: pro souborovou aplikaci. Další informace o syntaxi těchto direktiv najdete v článku o direktivách preprocesoru v části o souborových aplikacích. Nebo můžete prozkoumat aplikace založené na souborech podle kurzu o souborových aplikacích.

Soubor obsahuje direktivy script.cs

Následující chyby označují script.cs syntaxi v kompilovaném souboru C#:

  • CS7009: Nelze použít #r po prvním tokenu v souboru
  • CS7010: Očekává se název souboru v uvozovkách
  • CS7011: #r je povolen pouze ve skriptech
  • CS8097: #load je povolen pouze ve skriptech

Tyto direktivy nejsou podporovány v kompilovaném jazyce C#. Musíte je odebrat, nebo použít script.cs.