system () в stdio или stdlib? - PullRequest
       13

system () в stdio или stdlib?

0 голосов
/ 31 января 2012

Я использовал system("pause") с stdio.h, и он работал без ошибок. Когда я посмотрел на функции stdio, system() находится в stdlib. Как получилось, и вот код?

#include <stdio.h>

int main() {
    printf("Hello World\n" );
    system("pause");
    return 0;
}

Ответы [ 4 ]

11 голосов
/ 31 января 2012

Ответ в том, что это неявное объявление. Если компилятор не видит прототип для функции, он предполагает, что он был объявлен как:

int system();

Если вы включите уровень предупреждения на вашем компиляторе, вы, вероятно, увидите, что это вызывает предупреждение. Неявные объявления, как правило, нежелательны, но в этом случае именно поэтому это работает без каких-либо ошибок.

0 голосов
/ 31 января 2012

Из стандарта в 4.10.4.5 Системная функция находится в stdlib.h:

     #include <stdlib.h>
     int system(const char *string);
0 голосов
/ 31 января 2012

#include содержит только объявление функции (прототип), функциональность предоставляется библиотекой, которая включена в этап связывания.

Даже если вы не #include, еслиОпределение, принятое компилятором при компиляции, совпадает с определением в библиотеке, в котором оно хранится, ошибки нет, и она будет работать.

0 голосов
/ 31 января 2012

Согласно справочным страницам, это в stdlib.h

...