在 C 中将 double 赋值给整数会导致程序崩溃

Assigning a double to an integer in C causes the program to crash

我正在用 C 语言开发一个可视化应用程序来渲染一些烟花爆炸作为一个学习项目。为了控制它们上升的速度,我有一个这样的速度变量:

typedef struct Firework
{
    //Other data on the struct
    int speed;
} Firework;

我还需要为每个烟花初始化 speed 变量,所以下一段代码是:

// this works:
const int maxSpeed = 1;

// however if replaced with this, then the program will crash inside the loop
// const int maxSpeed = 0.5;

Firework fireworks[5] = { 0 };
for(size_t i = 0; i < sizeof(fireworks) / sizeof(fireworks[0]); i++)
{
    fireworks[i].speed = (rand() % maxSpeed) + 1;
}

问题是,我错误地将值 0.5 分配给 maxSpeed,结果是程序启动,然后当我尝试使用 maxSpeed 时几乎立即终止。我意识到错误并修复了它,但不幸的是我在网上找不到太多东西,还有一些我不明白的地方:

使用双精度初始化整数是 C 语言中的未定义行为吗?

如果是这样,为什么我的编译器没有收到任何错误或警告消息? (Mingw-w64)

是什么导致应用程序终止(有时甚至退出代码为 0),而不只是表现得很奇怪?

maxSpeed 变量 const 与此有什么关系吗?

0.5转换为整数是zero。然后使用模 % 运算符将 rand 函数的结果除以零 - 这当然会终止大多数硬件平台上的程序。这是未定义的行为。