Код до того, как while (1) не запускается

У меня есть такой код:

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("hello");

    while(1){
        // whatever here
    }
}

и вопрос: почему пропускается первая инструкция? Он запускает только цикл, привет никогда не печатается. Я скомпилировал его с помощью gcc и g ++ с тем же результатом.


person Daniel Kucal    schedule 24.02.2016    source источник
comment
Хороший вопрос. В комплекте с достаточно полным исходным кодом и легко понятным вопросом. (+1)   -  person pmg    schedule 24.02.2016


Ответы (2)


Ваше предположение неверно, ваш код запускается, только stdout не сбрасывается, а буферизуется.

Используйте fflush(stdout) после printf("hello"), это заставит выводить стандартный вывод.

И, как указал @Bathsheba, также символ новой строки ("\n") внутри printf заставляет его сбрасывать, что объясняется в этом вопросе SO.

person Markus Weninger    schedule 24.02.2016

Он действительно запускается, просто буфер вывода не очищается перед вашим while.

Вместо этого используйте printf("hello\n");. Символ новой строки очищает буфер, поэтому вывод немедленно записывается на вашу консоль.

person Bathsheba    schedule 24.02.2016