1. Die Auswertereihenfolge ist compilerabhängig.
2. Die Funktion ist abhängig vom Compilerschalter ('Complete boolean evaluation')
Absolute nicht 'clean code' tauglich.
Ich kann das Clean Code Buch jetzt nicht auswendig, aber meines Wissens steht da weder was über "Clean Code ist portabel", noch "Clean Code ist resistent gegen Umgebungsänderungen". Im Zweifelsfall prüft man das mit
{$IFOPT B+}
und wirft einen Compilerfehler.
Was die Auswertereihenfolge betrifft: Ein Compiler, der ein Konstrukt wie
if (P<> nil) and P.Enabled then
in eine Schutzverletzung führt, hat bei m.E. sowieso keine Chancen.