2015-04-12 66 views
4

存在包含文本文件的結構。在c中包含結構中的文本文件

struct student 
{ 
    #include "test" 
}; 

test與以下信息

UU2(testing,value,21); 

什麼好處,我們將通過在結構的文本文件中獲取ASCII純文本文件,我不知道是什麼意思。

任何人都可以幫助我嗎?

+1

什麼是UU2? –

+0

知道這意味着什麼是非常困難的。您將需要找到UU2在其他文件中的某處。如果您使用Linux,您可以嘗試使用'grep -r'#define。* UU2'。/ include /'。 – tivn

+0

即使我不確定什麼是UU2和我使用的操作系統是LINUX – user3160866

回答

1

不可能肯定地說這裏發生了什麼,沒有上下文或UU2的定義,但這看起來很像通用的C模式,稱爲X macros。通常在包含的文件中會有更多的行。

X宏用於反轉運算符和操作數(即宏和數據之間)之間的關係。對於正常的宏,該關係是一個定義多個輸入,即#define M()...之後將是M(foo),M(bar)等整個代碼;一個M操作重複應用於多個不同的輸入。

相反,X宏的關係多個定義 - >一個輸入。輸入被表示爲一個宏調用塊,然後周圍的代碼將爲宏設置合適的定義,以便這些應用程序擴展爲有用的東西。這具有以下優點:可以將相同的調用塊重複地粘貼到程序中的不同定義中,其中已經爲其控制宏設置了不同的定義,以創建相同基本輸入數據的不同擴展。例如相同的輸入塊(在「block.x」):

M(one, 7); 
M(two, 8); 
M(three, 9); 

...可以被解釋爲一個結構聲明,一個結構初始化,或在結構中的元素的展開循環,這取決於上下文它被放置和M在該點的可見的定義:

// context 1: declare a struct 
#define M(N, V) int N; 
struct foo { 
    #include "block.x" 
}; 

// context 2: initialize a struct 
#define M(N, V) .N = V, 
struct foo f = { 
    #include "block.x" 
}; 

// context 3: do something to a struct 
#define M(N, V) if(THIS.N==8)puts("eight!");else puts("not eight"); 
#include "block.x" // prints "not eight", "eight!", "not eight" 

把宏語句的塊在它自己的文件使得它可以容易地#include d爲多個不同的擴展的上下文,允許單個結構化數據定義有多個應用程序。通過將數據結構中的任何更改立即傳播到程序中隨處解釋的方式,將常見結構集中在一個文件中可以有助於可維護性。

#include沒有做到這一點的唯一方法,但它是常見的模式)

這是爲什麼彭定康使用這裏,貌似只有一個線和UU2只有一個定義?那麼,同樣的原則仍然適用 - 即使該程序目前不在多個位置應用結構化數據,但它仍然意味着無論過程/人員如何生成它,並不需要知道有關C程序解釋他們提供給它的純抽象結構。他們只能關注佈局,而不需要知道它是否構成類型定義的一部分,以及如何將其編輯爲源文件(或者C具有諸如類型定義之類的東西,甚至程序是用C語言編寫的)。它們提供抽象的結構和價值,C程序將對數據施加自己的含義。