Почему этот фрагмент org-babel c не выводит ничего?

По сути, printf не производит вывода, если я помещаю его в main().

Это работает:

#+begin_src C
printf("Hello World!\n");
#+end_src

Но это

#+begin_src C
void main() {
printf("Hello World!\n");
}
#+end_src

приводит к

Блок кода не произвел вывода

Я попытался добавить :results output в строку begin_src. Я пытался включить stdio.h. Когда я смотрю в *Messages*, я вижу, что когда я заключаю printf в main, я получаю сообщение об ошибке

**Ошибка чтения результатов: (начало буфера)**

Что здесь не так?


person William Everett    schedule 13.06.2014    source источник


Ответы (1)


Попробуй это:

#+name: main
#+begin_src C
int main(int argc, char *argv[]) {
printf("Hello World!\n");

return 0;
}
#+end_src
person kikiz    schedule 13.06.2014
comment
Это сработало, даже без передачи параметров в main или #+name: main (и мне пришлось поставить точку с запятой после return 0). Очевидно, это просто должен был быть int с возвратом? - person William Everett; 14.06.2014
comment
Это всегда зависит от используемого стандарта ANSI C. Если это C89/90, то можно писать без int, если нет, то нужен int. И да, вы должны добавить точку с запятой после возврата 0, это была моя ошибка, спасибо. - person kikiz; 14.06.2014
comment
Неа. По мере того, как я играю дальше, не имеет значения, какой стандарт я использую. Добавление :flags -std=c99 позволяет мне использовать функции c99, но не позволяет мне получать выходные данные из функции void. - person William Everett; 14.06.2014
comment
void main() {...} не является стандартом ANSI C, это разрешено некоторыми компиляторами C, но это неправильно. В ANSI C C89/C90 вы можете написать просто main() {...}, потому что подразумевается int. - person kikiz; 14.06.2014