我看到下面的代码在this answer到What is your favorite C programming trick?这个C技巧做什么?
这段代码是做什么的?它有什么用处?
double normals[][] = {
#include "normals.txt"
};
我看到下面的代码在this answer到What is your favorite C programming trick?这个C技巧做什么?
这段代码是做什么的?它有什么用处?
double normals[][] = {
#include "normals.txt"
};
这使用预处理器来初始化一个数组。
它基本上内嵌了用数值填充数组的代码,通过从外部文本文件读取它。请注意,这需要“normals.txt”充满匹配C语法该值,即:
{0, 0, 1},
{0, 1, 0},
{1, 0, 0}
OMG ....它读取“normal.txt”并填充“法线[] []”?不要说是... – hari
@hari:是的 - 它只是使用该文件的文件内容并将其“转储”到源代码中,inline ... –
您可能想要补充的是,预处理是之前完成的步骤编译,以避免与运行时加载文件混淆。 :)这个“技巧”对导入(例如生成的)数据是很有用的,因为只有在开发应用程序时才会改变数据,因为在编译时,数据会静态编译到可执行文件中,并且不会再发生变化,即使输入文件本身变化。 – CodeCaster
2D阵列被初始化与该文件“normals.txt”的内容,这大概包含有效C代码,并可能与其他代码共享或者是其他软件的输出。
使用预处理指令#include
将就地粘贴它引用的文件中的任何代码...因此,“normals.txt”中的任何内容都将被格式化为适合数组初始值设定项的有效C语法代码列表为normals
。
因为预处理发生在实际编译步骤之前,所以这将创建有效的C代码来初始化二维数组,而无需编码器在实际的.c文件中创建大量文本来初始化数组的值。
这使得丑陋的代码。一个更简洁的选择是让生成normals.txt文件的任何东西生成一个具有完整数组声明的.c文件。
谢谢大家。我承认 - 我*被吹走*。 :D – hari