2012-03-08 287 views
2

在這個頭文件中,我收到錯誤:unknown type name uint32,unit16。我是Objective-C的新手,我正嘗試在Xcode中導入項目。由於上述問題,構建失敗。谷歌沒有幫助。試着在標題搜索路徑中添加/stdint/stdint.hxcode unknown type name,unknown type name 'uint8_t', MinGW,Xcode - how to include c library and header file to cocoa project?)。建設仍然失敗。未知類型名稱uint32/unit16

/*------------------------------------------------------------------------- 
    * 
    * block.h 
    * POSTGRES disk block definitions. 
    * 
    * 
    * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group 
    * Portions Copyright (c) 1994, Regents of the University of California 
    * 
    * $PostgreSQL: pgsql/src/include/storage/block.h,v 1.26 2010/01/02 16:58:08 momjian Exp $ 
    * 
    *------------------------------------------------------------------------- 
    */ 
    #ifndef BLOCK_H 
    #define BLOCK_H 

    /* 
    * BlockNumber: 
    * 
    * each data file (heap or index) is divided into postgres disk blocks 
    * (which may be thought of as the unit of i/o -- a postgres buffer 
    * contains exactly one disk block). the blocks are numbered 
    * sequentially, 0 to 0xFFFFFFFE. 
    * 
    * InvalidBlockNumber is the same thing as P_NEW in buf.h. 
    * 
    * the access methods, the buffer manager and the storage manager are 
    * more or less the only pieces of code that should be accessing disk 
    * blocks directly. 
    */ 
    typedef uint32 BlockNumber; 

    #define InvalidBlockNumber  ((BlockNumber) 0xFFFFFFFF) 

    #define MaxBlockNumber   ((BlockNumber) 0xFFFFFFFE) 

    /* 
    * BlockId: 
    * 
    * this is a storage type for BlockNumber. in other words, this type 
    * is used for on-disk structures (e.g., in HeapTupleData) whereas 
    * BlockNumber is the type on which calculations are performed (e.g., 
    * in access method code). 
    * 
    * there doesn't appear to be any reason to have separate types except 
    * for the fact that BlockIds can be SHORTALIGN'd (and therefore any 
    * structures that contains them, such as ItemPointerData, can also be 
    * SHORTALIGN'd). this is an important consideration for reducing the 
    * space requirements of the line pointer (ItemIdData) array on each 
    * page and the header of each heap or index tuple, so it doesn't seem 
    * wise to change this without good reason. 
    */ 
    typedef struct BlockIdData 
    { 
     uint16  bi_hi; 
     uint16  bi_lo; 
    } BlockIdData; 

回答

3

一個通常應當使用(這些在C99定義,頭文件stdint.h)被命名爲喜歡uint32_t的類型。所有其他人都是非標準的,如果可以的話應該避免。現在,在你的情況,你不能避免非標類:-)因此,爲了使你的代碼編譯,你需要非標準名稱通用的標準是這樣地圖:

typedef uint32_t uint32; 

您需要爲PostgreSQL中使用的所有類型添加此映射。一種方法是將它們添加到預編譯頭文件(.pch)文件中,或者使用這些typedefs創建頭文件,然後再包含PostgreSQL頭文件。

+0

我有'socklen_t'未知類型名稱的類似問題。這個變量在socket.h中定義,但不在工作區中。我嘗試在標題搜索路徑中添加路徑,但沒有任何更改。 – Ava 2012-03-19 03:04:59

0

uint32應該是UInt32。您將要調整的名稱或:

typedef UInt32 uint32; 
typedef uint32 BlockNumber; 
+0

'UInt32'也是非標準的。 'uint32_t'是要使用的(它在C99中定義,即使它是可選的,它應該在每個系統上都可用)。 – DarkDust 2012-03-08 18:55:00