Мне кажется, вопрос действительно не вполне на знание 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) {
^