Why is argc an 'int' (rather than an 'unsigned int')?

后端 未结 13 2238
心在旅途
心在旅途 2021-01-31 01:37

Why is the command line arguments count variable (traditionally argc) an int instead of an unsigned int? Is there a technical reason for t

相关标签:
13条回答
  • 2021-01-31 02:05

    The declaration for main() was defined before the unsigned types were added to the language - see DMR's page on 'Primeval C'. It was too late to change when unsigned was added.

    0 讨论(0)
  • 2021-01-31 02:07

    I suppose it is designed to be compatible with C, and in C times people didn't really care that much about signed/unsigned correctness.

    0 讨论(0)
  • 2021-01-31 02:14

    Here's a history of the C programming language in dmr's own words. It's not stated explicitly (at least not from the quick skim I gave it), but the earliest versions of C didn't support unsigned types. mjv's point about implicit typing to int is also relevant.

    EDIT

    The Bell Labs link has been broken for a while: here's an alternate link to the same paper.

    0 讨论(0)
  • 2021-01-31 02:15

    Another reason could be that unsigned types can be inconvenient for iteration. For example, this snippet iterating down:

    for (size_t i = SIZE - 1; i >= 0; --i)
      ...
    

    Is, in fact, a bug. When i reaches 0 in the last iteration, it will go on right into 4294967295 (on a 32-bit machine) and the loop won't terminate.

    For this reason, I personally find plain ints more convenient for iteration. You don't have to be especially careful when you switch a for loop from counting up to counting down when using ints.

    0 讨论(0)
  • 2021-01-31 02:15

    As a solution to your warning problem, you could do something like this to suppress the warnings:

    const unsigned int uargc = (unsigned int) argc;
    
    0 讨论(0)
  • 2021-01-31 02:17

    I see how it might seem weird: argc should not be negative! But look at it this way: both int and unsigned int cover the range of values you'd accept (if you have 2^31 command line parameters, you have a problem) and int is shorter to type.

    Interview puzzle question: how many keyboards would have been used up typing the unsigned if C had gone with unsigned int argc?

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