What is a portable method to find the maximum value of size_t?

后端 未结 5 1255
盖世英雄少女心
盖世英雄少女心 2020-12-05 09:35

I\'d like to know the maximum value of size_t on the system my program is running. My first instinct was to use negative 1, like so:

size_t max_size = (size_         


        
相关标签:
5条回答
  • 2020-12-05 09:40

    A manifest constant (a macro) exists in C99 and it is called SIZE_MAX. There's no such constant in C89/90 though.

    However, what you have in your original post is a perfectly portable method of finding the maximum value of size_t. It is guaranteed to work with any unsigned type.

    0 讨论(0)
  • 2020-12-05 09:44

    As an alternative to bit-operations suggested in the other answers, you could do this in C++

    #include <limits>
    size_t maxvalue = std::numeric_limits<size_t>::max()
    
    0 讨论(0)
  • 2020-12-05 09:52

    The size_t max_size = (size_t)-1; solution suggested by the OP is definitely the best so far, but I did figure out another, more convoluted, way to do this. I'm posting it just for academic curiosity.

    #include <limits.h>
    
    size_t max_size = ((((size_t)1 << (CHAR_BIT * sizeof(size_t) - 1)) - 1) << 1) + 1;
    
    0 讨论(0)
  • 2020-12-05 09:53

    If you are assuming at least C++11 compiler then SIZE_MAX should be available to you:

    http://en.cppreference.com/w/c/types/limits

    0 讨论(0)
  • 2020-12-05 10:04
    #define MAZ_SZ (~(size_t)0)
    

    or SIZE_MAX

    0 讨论(0)
提交回复
热议问题