#assert

Vom Gebrauch der #assert-Direktive wird abgeraten. Die #assert-Direktive diente ursprünglich dazu, mehr oder weniger standartisierte Prädikate zu definieren, wie beispielsweise, um den Prozessortyp anzugeben. Da sich jedoch niemals ein Standard durchsetzte, sind diese Prädikate unsicher, da sie von System zu System verschieden gehandhabt, benannt und teilweise ganz weggelassen werden.

Siehe auch #unassert

Details

Die #assert-Direktive definiert Prädikate, wobei ein Prädikat mit Antwort auf eine Frage umschrieben werden kann. Die #assert-Direktive definiert, welches die einzig gültige Antwort für ein Prädikat ist. Die Antwort auf ein Prädikat wird dabei in runde Klammern () geschrieben. Um das Prädikat mittels der #if-Direktive abzufragen, muss dem Prädikat ein # vorangestellt werden. Die zu überprüfende Antwort wird wiederum in runde Klammern () geschrieben.

#include <stdio.h> #assert language(de) int main(){ #if #language(en) printf("Hello World!\n"); #elif #language(de) printf("Hallo Welt!\n"); #endif return 0; }

Hallo Welt!

Möchte man abzufragen, ob überhaupt irgend ein Wert für ein Prädikat gesetzt wurde, lässt man die Antwort inklusive den Klammern einfach weg. Um ein Prädikat neu zu definieren, überschreibt man die Angaben mit einer erneuten #assert-Direktive. Um das Prädikat zu löschen, benötigt man die #unassert-Direktive.

Ein Beispiel: Auf gewissen Systemen sei ein Prädikat namens endian definiert, welches zwei Antworten haben kann: little und big. Damit könnte automatisch ermittelt werden, ob der Prozessor das Little- oder Big-Endian-Format unterstützt und die Compilierung dementsprechend gesteuert werden. Das verwendete System des Autors brachte jedoch hervor, dass dieses Prädikat nicht definiert sei:

#include <stdio.h> int main(){ #if #endian(big) printf("Big Endian\n"); #elif #endian(little) printf("Little Endian\n"); #elif #endian printf("Some kind of Endian\n"); #else printf("Predicate undefined.\n"); #endif return 0; }

Predicate undefined.