theducks: (Default)
theducks ([personal profile] theducks) wrote2008-08-05 11:59 am

(no subject)

Dear LazyGDB..

Not knowing much about C, I find myself confused by the following, extrapolated from some code I didn't write:

Code:
#include <stdlib.h>
#include <signal.h>

int main(int argc, char **argv)
{

        char    opt;
        char    *options = "a:de:f:l:p:";

        opt = getopt(argc, argv, options);
        printf ("Opt: %d\n",opt);

}


Linux on PowerPC:
suffix:~# ./test -a fish
Opt: 97
suffix:~# ./test
Opt: 255


Linux on i686:
vitalstatistix:~# ./test -a fish
Opt: 97
vitalstatistix:~# ./test 
Opt: -1


What is the deal?

ISO 9899 section J3.4

[identity profile] mkj.livejournal.com 2008-08-05 07:57 pm (UTC)(link)
char's signedness is implementation-defined. If you care, use "(un)signed char" or pass some gcc flag to force it a particular way.

J3.4
"Which of signed char or unsigned char has the same range, representation, and behavior as ‘‘plain’’ char"