2012-01-31 2 views
0

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

#include <stdio.h> 

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

звучит как контратип: http://stackoverflow.com/questions/4800102/not-including-stdlib- h-does-not-produ-any-compiler-error – mwcz

+1

Вы должны понять фундаментальное различие между «if» и «only if». Стандартные документы обычно говорят: «Если вы делаете X, вы получаете Y.» Это * ничего не говорит * о том, что произойдет, если вы не сделаете X. –

+1

Как правило, лучше избегать использования системных вызовов [link] (http://stackoverflow.com/questions/900666/system-calls-in -c-and-their-role-in-programming)
[link] (http://www.gidnetwork.com/b-61.html)
Система вызова в окнах в основном такая же, как и работа cmd.exe и ввод текста Пауза. – k3oy

ответ

11

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

int system(); 

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

+1

Текущий язык C не имеет неявных деклараций. Компилятор должен сообщить об ошибке. –

0

По страницам руководств, он находится в stdlib.h

0

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

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

+2

прототип - это * объявление *, а не * определение *. В этом случае определение предоставляется библиотекой C. – FatalError

+0

Ты прав, мой плохой. прочитайте это как 's/definition/declaration /'. – njsg

+0

@njsg: не стесняйтесь редактировать свой ответ и исправить ошибку –

0

От стандарта в 4.10.4.5 Функции системы находится в stdlib.h:

 #include <stdlib.h> 
    int system(const char *string); 
Смежные вопросы