Vad är villkorlig sammanställning?
Vid datorprogrammering beskriver villkorlig sammanställning förmågan hos en mjukvarukompilator eller källkodprocessor att inkludera eller ignorera vissa kommandon eller blockblock baserade på språkspecifika instruktioner som inte tekniskt ingår i kärnprogrammeringsspecifikationen. Kommandona som används för att utlösa villkorlig sammanställning i ett program kallas ofta förprocessordirektiv, även om de också kan kallas kompilatordirektiv, villkorliga kommentarer eller villkorade definieringar. Beroende på vilken kompilator eller språk som används kan de villkorade direktiven vara användardefinierade variabler eller makron, eller de kan också vara systemvariabler som ställs in av kompilatorn eller operativsystemet. Villkorlig kompilering används ofta för att konfigurera en enda uppsättning källkodfiler så att de kan sammanställas under olika miljöer eller operativsystem utan att behöva byta eller ändra källfiler.
De villkorade definitionerna som används för att testa för villkorlig sammanställning kan variera från ett språk till ett annat, men de är i allmänhet makron eller andra metadatauttryck utanför ramen för de normala programvariablerna. På språk som C är variablerna vanligtvis makron som läses av en förprocessor. Merparten av tiden är makronna inte tillgängliga med den verkliga körbara programkällkoden, även om de finns i samma källfiler.
Direktiven som används för att testa de definierade villkorade variablerna är rudimentära och följer samma logik som ett if-sedan uttalande. De grundläggande testerna som kan utföras för villkorlig sammanställning är om ett värde är definierat, inte definierat eller, i vissa fall, om två definierade variabler är ekvivalenta. Variablerna eller makronen har i allmänhet inget värde av betydelse, för att definiera dem är vad direktiven kontrollerar för. Med vissa språk och kompilatorer kan värdet på en definierad variabel dock få betydelse om de utvärderas för det booleska tillståndet.
När en kompilator möter direktiv som används för villkorlig sammanställning utvärderas direktiven för att se om de testar som sanna eller falska. Om det är sant, sammanställs koden som följer direktivet som normalt. annars hoppar kompilatorn helt över koden som finns i direktivet. Detta är till skillnad från villkorade logiska uttalanden i själva den körbara programkoden eftersom även om logiken har ett kodblock som inte kan köras kommer det fortfarande att tolkas och sammanställas i de flesta fall. Med villkorade förprocessordirektiv inkluderas, tolkas eller sammanställs aldrig kod över överkod. Det bör också noteras att när förprocessorn har utvärderat alla villkorade variabler och direktiv, sammanställs de inte med resten av programmet, eftersom de endast är avsedda att ge riktning till kompilatorn.
Villkorlig sammanställning används oftast för att inkludera eller utesluta kod som är specifik för ett visst operativsystem eller miljö. Detta innebär att bibliotek som finns i ett operativsystem kan inkluderas villkorat om direktivet fastställer att programmet sammanställs under det operativsystemet. Alternativt kan direktiven också användas för att inkludera eller utesluta kod baserad på användardefinierade variabler. Detta kan göras så att felsökning eller profileringskod inte ingår i den slutliga versionen av ett program, eller så att vissa funktioner kan aktiveras eller inaktiveras utan att behålla separata kopior av koden.