Restwert mit Divisor 0
Division oder Modulo durch null führen laut C-Standard zu undefiniertem Verhalten; ein Ergebnis ist nicht festgelegt:
#include <stdio.h>
int main() {
int a = 12 % 0; // 💣 Undefiniertes Verhalten: Modulo durch null
}
Unter Linux wird ein Signal ausgelöst, das den Prozess beendet und die Meldung gibt: ›Program terminated with signal: SIGFPE‹ (Floating Point Exception, das auch für Integer-Division durch null verwendet wird).
Compiler wie GCC warnen bei Division oder Modulo durch null, sofern der Divisor ein konstanter Ausdruck ist, auch ohne zusätzliche Flags. Das gilt für Literale und constexpr-Werte, nicht für Laufzeitwerte.
int main() {
int a = 1 / 0; // Warnung: Division durch Literal 0
int b = 1 % 0; // Warnung: Modulo durch Literal 0
constexpr int null1 = 0;
int c = 1 % null1; // Warnung: Modulo durch constexpr 0
int null2 = 0;
int d = 1 % null2; // Keine Warnung: null2 ist Laufzeitwert
}
Bei der Kompilierung mit GCC erscheinen entsprechende Warnungen (auch ohne -Wall), bezogen auf konstante Null-Divisoren.
<source>:2:15: warning: division by zero [-Wdiv-by-zero]
2 | int a = 1 / 0;
| ^
<source>:3:15: warning: division by zero [-Wdiv-by-zero]
3 | int b = 1 % 0;
| ^
<source>:5:15: warning: division by zero [-Wdiv-by-zero]
5 | int c = 1 % null1;
| ^