2012-03-08 3 views
2

이 헤더 파일에서 알 수없는 형식 이름 uint32, unit16이 오류가 발생합니다. 나는 Objective-C를 처음 사용하고 있으며 Xcode에서 프로젝트를 가져 오려고합니다. 위의 문제로 인해 빌드가 실패합니다. Google에서 도움을받지 않았습니다. 헤더 검색 경로에 /stdint/stdint.h을 추가하여 (xcode 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

유형을. 다른 모든 것들은 표준이 아니므로 가능한 한 피해야합니다.

typedef uint32_t uint32; 

당신이 필요로 : 그래서 당신의 코드를 컴파일하려면이 같은 표준들에 대한 표준이 아닌 이름을 매핑해야 :-) 이제 귀하의 경우, 당신은 표준이 아닌 유형을 피할 수 없다 PostgreSQL에서 사용되는 모든 유형에 대해이 매핑을 추가합니다. 한 가지 방법은 미리 컴파일 된 헤더 파일 (.pch)에 파일을 추가하거나 PostgreSQL 헤더를 포함하기 전에 #include에 해당하는 이러한 typedef를 사용하여 헤더를 만드는 것입니다.

+0

'socklen_t' 알 수없는 유형 이름과 비슷한 문제가 있습니다. 이 변수는 socket.h에 정의되어 있지만 작업 영역에는 없습니다. 헤더 검색 경로에 경로를 추가하려고 시도했지만 아무 것도 변경되지 않았습니다. – Ava

0

uint32는 UInt32 여야합니다. 당신은 나 이름을 조정할 수 있습니다 하나는 일반적으로 (이는 C99에서 헤더 파일 stdint.h을 정의) uint32_t 같은 이름이 지정됩니다 사용해야

typedef UInt32 uint32; 
typedef uint32 BlockNumber; 
+0

'UInt32'도 비표준입니다. 'uint32_t'는 사용하기위한 것이고 (C99에 정의되어 있으며 선택 사항이지만 모든 시스템에서 사용할 수 있어야합니다). – DarkDust

관련 문제