【发布时间】:2020-05-12 00:36:00
【问题描述】:
今天早上我得知著名的电子游戏《超级马里奥 64》已经完全反编译回 C 源代码。只是出于好奇,我决定看一看,我发现了一些我以前从未见过的东西。
// 0x09000000
ALIGNED8 const u8 machine_09000000[] = {
#include "textures/machine/ttc_textures.00000.rgba16.inc.c"
};
看起来他们在数组中放置了一个包含指令。这在整个程序中重复进行。
我已经学习 C 有一段时间了,我认为自己对这门语言相当流利,但这对我来说是非常新奇的东西,我有很多关于它的问题。
1) 这样做真的合法,甚至被推荐吗?
2) 你为什么要这样做?
3) 为什么包含引用 *.c 文件?
4) 为什么将类型设置为 u8(如果我明白的话,这应该是 unsigned char 的标准别名)?
5) ALIGNED8 宏是什么?这是标准的东西吗?
我曾尝试自行收集信息,但在此主题上找不到太多信息。如果你想自己看源代码,这里是链接:https://github.com/n64decomp/sm64
【问题讨论】:
标签: arrays include static-linking precompile