Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个C技巧是做什么的?_C - Fatal编程技术网

这个C技巧是做什么的?

这个C技巧是做什么的?,c,C,我在中看到了下面的代码 这段代码的作用是什么?它有什么用处 double normals[][] = { #include "normals.txt" }; 这将使用预处理器初始化数组 它基本上是通过从外部文本文件读取来内联用值填充数组的代码。请注意,这要求“normals.txt”中填充与C语法匹配的值,即: {0, 0, 1}, {0, 1, 0}, {1, 0, 0} 2D数组使用文件“normals.txt”的内容初始化,该文件可能包含有效的C代码,并且可能与其他代码共享,或

我在中看到了下面的代码

这段代码的作用是什么?它有什么用处

double normals[][] = {
    #include "normals.txt"
};

这将使用预处理器初始化数组

它基本上是通过从外部文本文件读取来内联用值填充数组的代码。请注意,这要求“normals.txt”中填充与C语法匹配的值,即:

{0, 0, 1},
{0, 1, 0},
{1, 0, 0}

2D数组使用文件“normals.txt”的内容初始化,该文件可能包含有效的C代码,并且可能与其他代码共享,或者是其他软件的输出。

使用预处理器指令
\include
将其引用的文件中的任何代码粘贴到位。。。因此,“normals.txt”中的任何内容都将被格式化为有效的C语法代码,适合
normals
的数组初始值设定项列表


由于预处理在实际编译步骤之前进行,因此这将创建有效的C代码来初始化
法线
2D数组,而无需编码器在实际的.C文件中创建大量文本来初始化数组的值。

这会导致代码难看。一个更干净的选择是,让生成normals.txt文件的任何东西只生成一个具有完整数组声明的.c文件。

@hari:是的-它只是使用该文件的文件内容并将其“转储”到源代码中,内联…您可能希望添加预处理是编译之前完成的步骤,为避免在运行时加载文件时出现混淆。:)这种“技巧”对于导入(例如生成的)数据非常有用,这些数据在开发应用程序时只会更改,因为在编译时,数据会静态编译到可执行文件中,即使输入文件本身发生更改,也不会再更改。@Blagovest Buyukliev:所以在正常情况下,任何“#include”都会,它只是在它所称的位置替换它的内容。对吗?@hari:是的-这就是C的预处理器中“包含”的正常工作方式。C并不真正关心“.h”或“.C”或任何其他文件类型-#include只在编译时读取该文件,并将其插入当前文件。谢谢各位。我承认——我被吓坏了D