[완료]printf(" ~~~ ");과 printf(" ~~~~ \n "); 의 차이

wodnrrns의 이미지

#include <stdio.h>
 
void test()
{
 printf("test module");
 fflush(stdout); 
while(1);
}
 
int main()
{
  printf("program start");
  fflush(stdout);
  test();
  return 0;
}

이 상황에서 main의 print문과 test()함수의 print 문이 출력되지 않는이유는 뭘까요?
(출력단 바로뒤에 fflush(stdout); 도 해보았지만 똑같네요.)
printf(""); 문 안쪽에 개행문자 \n을 넣으면 출력이 또 되네요.
컴파일러는 gcc 4.2.1 버전 MacOS 10.6에서 테스트 해 보았습니다.
(제가 질문 내용을 수정하였습니다. 댓글 내용과 다른점 이해해 주세요.)
뭔가 다른걸까요?

syayiyip의 이미지

저는 출력이 잘 되는거 봐서 c 문법적인 차이는 없는거 같네요...

shint의 이미지

보여요.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

kaeri17의 이미지

버퍼상의 문제인듯.

rainroot의 이미지

정확한 이유는 모르겠지만..

printf("test module");

이걸
printf("test module\n");

으로 바꾸니 출력이 되는군요.

먼가.. 심오한..ㅎㅎ

ymir의 이미지

buffered i/o 로 검색해 보세요.

stream buffer 를 이용하는 i/o 함수들은 direct 로 출력되지 않고, buffer 에 저장되었다가..
\n 과 같은 flush 조건을 만나거나, 강제로 flush 시켰을 때에 출력됩니다.
fflush(), setbuf() 함수도 살펴보시면 참고가 될 겁니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

wodnrrns의 이미지

위의 분 말씀데로 while 문의 차이가 아니라 프린트문 뒤에 개행 문자의 유무에 따라서 결과가 달라지네요.
흠.. 글은 우선 해결로 두고 제가 버퍼 부분 찾아서 다시 추가해 놓겠습니다.
(댓글을 너무 성의없이 쓰시는 분들이 있네요. 예전엔 안그랬는데...ㅠ_ㅠ)

익명 사용자의 이미지

데→대

wodnrrns의 이미지

찾다가 kldp의 예전 스레드를 찾았네요.
저오 아직 공부중이긴 하나 오해의 소지가 있을까봐 관련 스레드 링크합니다.
http://kldp.org/node/34334
각설하고 정리하면 표준 출력의 버퍼링 모드에 따라서 출력이 되시는 분도있고 안되시는 분도 있을것 같네요.
흠.. 그냥 간단한 에러출력이나 flag의 출력에도 생각보다 많은걸 신경써줘야 한다는것을 이번 기회에
배운 것 같네요.
답변주신 분들 감사합니다.

mirheekl의 이미지

심지어는 환경 공개를 안하시더라도 그것만으로도 큰 도움이 될 때도 있습니다.
적어도 코드가 무조건 틀린 게 아니라는 것은 알수있으니까요.
성의 없는 답변 달거면 답변 달지 말라는 것처럼 들려서.. ^^;; 그런것도 도움이 된다는 의견 한표..

제가 인터넷 커뮤니티에서 가급적 보고싶지 않은 말중 하나가 "예전엔 안그랬는데.."입니다.
이거는 최근에 유입되신 분들에게 굉장한 자괴감을 주거든요.
마치 나때문에 그렇다는 것처럼 들려서 말이죠.
사실은 그냥 사람이 많아졌기 때문일 뿐인데..

발전가능성이 있는 대개의 커뮤니티가 비슷한 과정을 겪습니다.
과거의 분위기가 그리울 수 있다는 것 이해 못하는 바는 아니지만,
그닥 도움은 안되는 표현이라 생각합니다.

--

익명 사용자의 이미지

이걸보니 예전 기억이 나네요.
mpi 프로그래밍을 포트란으로 짰었는데, 구버전 g77에서는 아무런 문제가 없다가 신버전의 g77에서 mpi프로그램이 표준출력 동작을 이상하게 하는 것이었습니다.
알고보니 g77의 동작이 바뀌어서 내부적으로 fflush()를 제대로 안해주고 있더라는...
g77소스를 바꿔서 fflush()동작이 항상 일어나도록 바꿔주니 예전처럼 정상작동;;
g77 말고 다른 포트란 컴파일러의 경우는 문제 없고

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.