C/C++ use of int or unsigned int

后端 未结 6 1287
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-01 09:17

In a lot of code examples, source code, libraries etc. I see the use of int when as far as I can see, an unsigned int would make much more sense.

One pl

6条回答
  •  鱼传尺愫
    2021-01-01 10:07

    I chose to be as explicit as possible while programming. That is, if I intend to use a variable whose value is always positive, then unsigned is used. Many here mention "hard to spot bugs" but few give examples. Consider the following advocate example for using unsigned, unlike most posts here:

    enum num_things {
        THINGA = 0,
        THINGB,
        THINGC,
        NUM_THINGS
    };
    
    int unsafe_function(int thing_ID){
        if(thing_ID >= NUM_THINGS)
            return -1;
    
        ...
    }
    
    int safe_function(unsigned int thing_ID){
        if(thing_ID >= NUM_THINGS)
            return -1;
    
        ...
    }
    
    int other_safe_function(int thing_ID){
        if((thing_ID >=0 ) && (thing_ID >= NUM_THINGS))
            return -1;
    
        ...
    }
    
    /* Error not caught */
    unsafe_function(-1);
    
    /* Error is caught */
    safe_function((unsigned int)-1);
    

    In the above example, what happens if a negative value is passed in as thing_ID? In the first case, you'll find that the negative value is not greater than or equal to NUM_THINGS, and so the function will continue executing.

    In the second case, you'll actually catch this at run-time because the signedness of thing_ID forces the conditional to execute an unsigned comparison.

    Of course, you could do something like other_safe_function, but this seems more of a kludge to use signed integers rather than being more explicit and using unsigned to begin with.

提交回复
热议问题