首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未知类型名称uint32/uint16

未知类型名称uint32/uint16
EN

Stack Overflow用户
提问于 2012-03-09 02:44:15
回答 2查看 27.1K关注 0票数 3

在这个头文件中,我收到错误:未知类型名称uint32,uint16。我是Objective-C的新手,我正在尝试用Xcode导入一个项目。由于上述问题,构建失败。谷歌没有在标题搜索路径中添加/stdint/stdint.h ( xcode unknown type nameunknown type name 'uint8_t', MinGWXcode - how to include c library and header file to cocoa project?)。构建仍然失败。

代码语言:javascript
复制
   /*-------------------------------------------------------------------------
     *
     * 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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-09 02:51:54

通常应该使用的类型命名为uint32_t (这些类型在C99的头文件stdint.h中定义)。所有其他的都是非标准的,如果可以,应该避免。现在,在您的情况下,您无法避免非标准类型。因此,要编译代码,需要将非标准名称映射到标准名称,如下所示:

代码语言:javascript
复制
typedef uint32_t uint32;

您需要为PostgreSQL中使用的所有类型添加此映射。一种方法是将它们添加到预编译头文件(.pch)中,或者在包含PostgreSQL头文件之前使用这些typedefs创建一个头文件。

票数 6
EN

Stack Overflow用户

发布于 2012-03-09 02:48:41

UInt32应为uint32。您需要调整名称,或者:

代码语言:javascript
复制
typedef UInt32 uint32;
typedef uint32 BlockNumber;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9623043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档