k001
k001
:...

April 2032
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

k001 [userpic]
C contest

Коллега проводит небольшой contest на знание C, из одного вопроса.

Наваливайтесь!

Update: Ден сказал, что у меня во френдах умные люди. Я ему ответил, что я и не сомневался :)

Tags:
Comments

да это больше специфика gcc в 64 bit среде чем просто знание C.
поведение будет так же отличатся в m32/m64 как на sparc так и на mac os например...

+ в подоконном мире все еще хуже: sizeof(int) == sizeof(long) и != sizeof(void*) на x64

Мне кажется, вопрос действительно не вполне на знание C. А вообще implicit объявление функций как возвращающих int, конечно, не самая лучшая в мире идея в нашем неидеальном мире, где размер указателя может быть больше размера целого %)

P.S. Компилять надо с -Wall, тогда компилятор всё-всё расскажет. icc, кстати, по дефолту говорит этот warning:

$ gcc 1.c 2.c
$ gcc -Wall 1.c 2.c

1.c: In function `main':
1.c:4: warning: implicit declaration of function `get_string'
1.c:4: warning: format argument is not a pointer (arg 2)
1.c:5: warning: format argument is not a pointer (arg 2)
$ icc 1.c 2.c
1.c(4): warning #181: argument is incompatible with corresponding format string conversion
printf("%s\n", get_string("aaa"));
^

1.c(5): warning #181: argument is incompatible with corresponding format string conversion
printf("%s\n", get_string(argv[0]));
^

$ icc -Wall 1.c 2.c
1.c(4): remark #266: function "get_string" declared implicitly
printf("%s\n", get_string("aaa"));
^

1.c(4): warning #181: argument is incompatible with corresponding format string conversion
printf("%s\n", get_string("aaa"));
^

1.c(5): warning #181: argument is incompatible with corresponding format string conversion
printf("%s\n", get_string(argv[0]));
^

2.c(1): remark #1418: external function definition with no prior declaration
char *get_string(char *str) {
^