有效取消引用 C 中的整数作为指针文字

Valid to de-reference an integer-as-pointer literal in C

是否 portable/valid C 取消引用被视为地址的整数文字?即,如果我想在内存地址 0x12345678123 处设置一个 64 位值,是以下可移植且有效的 C,至少按照 C89 标准:

*(uint64_t *)(0x12345678) = 123ULL;

我没有看到编译器警告(通过 gcc -std=c89 -Wall input.c 测试),但我记得前一段时间看到一个关于这个主题的问题,其中有人将地址存储在中间变量中而不是直接去-引用整数文字(已转换为指针地址)。

只要地址0x12345678有效,并且有一个uint64_t对象,转换或直接使用整数都没有问题。但它可能不是所有平台上的有效地址。所以,如果你知道你在处理什么,那很好。

固定宽度类型仅在 C99 中引入。因此,当您询问 C89 中转换为 uint64_t* 的可移植性时,我发现这很矛盾 :)