c언어 변수 선언 위치에 대해 질문요

elminster의 이미지

#include <stdio.h>

int main ( void )
{

	printf("aa");
	int a = 0;
	printf("%d", a);

	return 0;
}

이거 왜 안되는거지요?

으음... 막상 의문이 생겨서 적어봤는데...

어차피 변수 선언하고 쓰는거니까 문제가 없을꺼라고 생각했는데..

nohmad의 이미지

elminster wrote:
#include <stdio.h>

int main ( void )
{

	printf("aa");
	int a = 0;
	printf("%d", a);

	return 0;
}

이거 왜 안되는거지요?

으음... 막상 의문이 생겨서 적어봤는데...

어차피 변수 선언하고 쓰는거니까 문제가 없을꺼라고 생각했는데..

Warning만 나고 컴파일은 되지 않나요?
만일 안되면 gcc -std=c99 옵션을 주세요.
C99 이전의 C 표준에서 선언은 항상 선두에 있어야 했습니다.
gcc 3.3에선 기본 옵션만으로 아무 warning 없이 컴파일 잘 되네요.

정태영의 이미지

gcc 2.x까지는 c99을 지원하지 못합니다 =3=33

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

elminster의 이미지

에러가 뜨더랍니다. VC 6.0쓰고 있어요

나를 봐, 나를 봐, 내 안의 괴물이 이렇게 크게 자랐어

angpoo의 이미지

질문을 보고 뭐 이런 뻔한 질문을 하나 싶었는데 이런건 언제 생겼데요
gcc 3.3.3에서 -std=c99 해주니 심지어 이런것도 되네요.

  int i=0;
  for (int i=0; i<10; i++) {
    printf("%d", i);
  }
  printf(" %d", i);

출력: 0123456789 0

C++ style comment나 variadic macro는 쓰기편하다보니 자주쓰고 있지만 이것은 왠지 좀 꺼려지네요.
호환성문제보다는 왠지 C답지 않다는 느낌에서...

ssif의 이미지

angpoo wrote:
질문을 보고 뭐 이런 뻔한 질문을 하나 싶었는데 이런건 언제 생겼데요
gcc 3.3.3에서 -std=c99 해주니 심지어 이런것도 되네요.
  int i=0;
  for (int i=0; i<10; i++) {
    printf("%d", i);
  }
  printf(" %d", i);

출력: 0123456789 0

C++ style comment나 variadic macro는 쓰기편하다보니 자주쓰고 있지만 이것은 왠지 좀 꺼려지네요.
호환성문제보다는 왠지 C답지 않다는 느낌에서...

음....
문법상 정확한 표현이긴 한데........
어째 제가 잘못 배운듯 하군요...
다시 처음부터 공부를 해야하는건지....
정말 C답지 않은 느낌입니다.-_-;

봄들판에서다

pynoos의 이미지

elminster wrote:
에러가 뜨더랍니다. VC 6.0쓰고 있어요

c89 까지에서는 C는 전방에 선언이 모두 되어 있어야합니다. 특히나 확장자가 .c 일경우 c++ compiler 대신 c compiler가 불리게 되는데,
아직 C99가 지원되지 않으므로 실행문 앞으로 선언을 옮기셔야합니다.
c++ compiler를 불리게하기 위해서는 확장자를 cpp나 cxx 등으로 바꾸세요.
VC가 .cc 확장자도 가능한지는 확인안해봤습니다.

Quote:
음....
문법상 정확한 표현이긴 한데........
어째 제가 잘못 배운듯 하군요...
다시 처음부터 공부를 해야하는건지....
정말 C답지 않은 느낌입니다.-_-;

아직 학교에서 배우는 것은 C89 문법이기 때문입니다. 여기에서 글쓴이 "전웅"으로 검색해보시면 재밌는 것을 많이 얻으실 수 있을 겁니다.

ssif의 이미지

Quote:

아직 학교에서 배우는 것은 C89 문법이기 때문입니다. 여기에서 글쓴이 "전웅"으로 검색해보시면 재밌는 것을 많이 얻으실 수 있을 겁니다.

감사합니다.
검색을 해보니 재미있는 글들이 많이 있었습니다.
몇일전엔 심심해서(-_-;;)명예의전당에 올라간 글들도 보았었습니다.
그때 전웅님께서 글 남기신것 보았는데 어떤분인지 무척 궁굼해 했었습니다.역시 고수님들은 다르더군요...^^

봄들판에서다

nohmad의 이미지

ssif wrote:
Quote:

아직 학교에서 배우는 것은 C89 문법이기 때문입니다. 여기에서 글쓴이 "전웅"으로 검색해보시면 재밌는 것을 많이 얻으실 수 있을 겁니다.

감사합니다.
검색을 해보니 재미있는 글들이 많이 있었습니다.
몇일전엔 심심해서(-_-;;)명예의전당에 올라간 글들도 보았었습니다.
그때 전웅님께서 글 남기신것 보았는데 어떤분인지 무척 궁굼해 했었습니다.역시 고수님들은 다르더군요...^^

KLDP 위키의 KLDPconf 페이지를 뒤져보시면 전웅님의 C99에 대한 발표 자료를 찾으실 수 있습니다.
* http://wiki.kldp.org/wiki.php/KLDPConf/20031011
* http://wiki.kldp.org/wiki.php/KLDPConf/20040118

그리고 han.comp.lang.c, han.comp.lang.c++ 쪽에도 주옥 같은 글들이 많이 있습니다. Google Groups에서 검색해보세요.

nahanjang의 이미지

#include <stdio.h>

int main ( void )
{

   printf("aa");
   {
       int a = 0;
       printf("%d", a);
    }

   return 0;
}

^^

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.