美文网首页程序员
[*_t]收集一些情报Part1: size_t, ssize_

[*_t]收集一些情报Part1: size_t, ssize_

作者: Quasars | 来源:发表于2017-02-06 12:24 被阅读73次

    To find where the header files located

    headername=sys/types.h
    echo "#include <${headername}>" | gcc -E -x c - | grep ${headername}
    

    Headers

    gnu_c - stddef.h: size_t/ssize_t/...
    See “From gnu.org” - “Compatibility Note:”

    unix - sys/types.h: ssize_t defined. size_t is from stddef.h

    sys/types.h:
    108:

    ifndef __ssize_t_defined

    typedef __ssize_t ssize_t;

    define __ssize_t_defined

    endif

    145:

    define __need_size_t

    include <stddef.h>

    
    
    
    
    From Wiki
    ----
    ######Size and pointer difference types######
    
    * Intro
    The C language specification includes the typedefs `size_t` and `ptrdiff_t` to represent memory-related quantities. 
    Their size is defined according to the target processor's arithmetic capabilities, not the memory capabilities, such as available address space. 
    Both of these types are defined in the <stddef.h> header (cstddef header in C++).
    * size_t
    `size_t` is an unsigned integer type used to represent the size of any object (including arrays) in the particular implementation. 
    The `sizeof()` operator yields a value of the type `size_t`. 
    The maximum size of `size_t` is provided via `SIZE_MAX`, a macro constant which is defined in the <stdint.h> header (cstdint header in C++). 
    `size_t` is guaranteed to be at least 16 bits wide. Additionally, ***POSIX*** includes **`ssize_t`**, which is a signed integral type of the same width as `size_t`.
    * ptrdiff_t
    `ptrdiff_t` is a signed integral type used to represent the difference between pointers. 
    It is only guaranteed to be valid against pointers of the same type; subtraction of pointers consisting of different types is implementation-defined.(不同类型指针的减法运算是未明确定义的,也就是假如一个*char\**与一个*int\**作减法,天知道他们的结果是啥....)
    
    From gnu.org
    ----------------
    A.4 Important Data Types
    The result of subtracting two pointers in C is always an integer, but the precise data type varies from C compiler to C compiler. Likewise, the data type of the result of sizeof also varies between compilers. ISO C defines standard aliases for these two types, so you can refer to them in a portable fashion. They are defined in the header file `stddef.h`
    
    * Data Type: **ptrdiff_t**
    This is the signed integer type of the result of subtracting two pointers. For example, with the declaration char *p1, *p2; the expression p2 - p1 is of type ptrdiff_t. 
    This will probably be one of the standard signed integer types (short int, int or long int), but might be a nonstandard type that exists only for this purpose.
    
    * Data Type: **size_t**
    This is an unsigned integer type used to represent the sizes of objects. The result of the sizeof operator is of this type, and functions such as malloc(see Unconstrained Allocation) and memcpy(see Copying Strings and Arrays) accept arguments of this type to specify object sizes. On systems using the GNU C Library, this will be unsigned int or unsigned long int.
    
    * **Usage Note:** 
    size_t is the preferred way to declare any arguments or variables that hold the size of an object.
    
    * **Compatibility Note:** 
    Implementations of C before the advent of ISO C generally used unsigned int
     for representing object sizes and int for pointer subtraction results. They did not necessarily define either size_t or ptrdiff_t. Unix systems did define size_t
    , in sys/types.h, but the definition was usually a signed type.
    

    相关文章

      网友评论

        本文标题:[*_t]收集一些情报Part1: size_t, ssize_

        本文链接:https://www.haomeiwen.com/subject/txiyittx.html