我看到下面的代碼在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