@Giorgi: Нет. Если функция соответствует предположениям, которые делает компилятор, это нормально. Просто когда есть несоответствие (например, с atof), вы получаете неопределенное поведение.
сь, это очень простой вопрос. Ниже приводится Cgg (test.c), который у меня есть.
#include <stdio.h>
//#include <stdlib.h>
int main (int argc, char *argv[]) {
int intValue = atoi("1");
double doubleValue = atof("2");
fprintf(stdout,"The intValue is %d and the doubleValue is %g\n", intValue, doubleValue);
return 0;
}
Обратите внимание, что я использую atoi () и atof () из stdlib.h, но я не включаю этот заголовочный файл. Я компилирую pgm (gcc test.c) и не получаю ошибки компилятора!
Я запускаю pgm (./a.out), и здесь вывод, который является неправильным.
The intValue is 1 and the doubleValue is 0
Теперь я включил stdlib.h (удалив комментарии перед #include), перекомпилировал и снова запустил. На этот раз я получаю правильный вывод:
The intValue is 1 and the doubleValue is 2
Почему же компилятор не жаловался на то, что не включил stdlib.h, и все же позволил мне использовать функции atoi (), atof ()?
Моя информация о gcc:
$ gcc --version
gcc (GCC) 4.1.2 20070925 (Red Hat 4.1.2-27)
Любые мысли приветствуются!