c 변수 선언에 대한 질문입니다.-_-a

정상인의 이미지

안녕하세요,눈팅만 하다 질문글 겨우 올리는 piloteer라 합니다.
최근 몇년간 c를 만지지 않아서 까먹은 상태에서, 어떤 분을 도와드리다 나온 이야기인데,
int a[M][N],i,j,sum=0; 로 선언할 시 전 a를 제외한 모든 변수가 0으로 선언된다고 말했었습니다.
...기억이 흐트러져서 삑사리를 낸건지는 모르겠지만.
그런데, 어떤 분이 말씀하시길-

#include
#define M 3
#define N 4
int main(){
int a[M][N],i,j,sum=0;
printf("%d %d %d %d \n",a[M-1][N-1],i,j,sum);
}
134518140 -1208980032 134513641 0 이렇게 나왔습니다. a[M-1][N-1], i, j, sum 순서입니다. 당연한 말이지만 값을 지정하지 않으면 가비지값이 나오게 될 것입니다.

.......랍니다. 제 생각과 틀리지요. 하지만 전 오래 코딩을 안 했기 때문에 이쪽이 더 일리 있다 싶어서 확인차 짜다 돌려봤는데-

dirk@dirk-desktop:~$ vim test2.c

#include stdio.h - 대괄호를 치면 글을 테그로 인식하는군요. 이뭐 -_- 괄호 뺏습니다.
#define M 3
#define N 4
int main()
{
int a[M][N],i,j,sum=0;
printf("%d %d %d %d \n",a[M-1][N-1],i,j,sum);
}

dirk@dirk-desktop:~$ gcc test2.c -o test2
dirk@dirk-desktop:~$ ./test2
0 0 0 0
dirk@dirk-desktop:~$ ./test2
0 0 0 0
dirk@dirk-desktop:~$ ./test2
0 0 0 0
dirk@dirk-desktop:~$

이렇게,전부 다 0이 나왔습니다.
이게 어떻게 되서 이렇게 출력된건지 설명을 들을 수 있으면 좋겠습니다._-_
점점 햇갈려집니다.

정상인의 이미지

http://gigglehd.com/zbxe/?mid=bbs&document_srl=337558&rnd=337735&comment_srl=337711#comment_337735
여기서 하고 있는 대화를 참고해 주시면 더 자세하게 이해하실 수 있으실 겁니다.
감사합니다.

klara의 이미지

gcc4.2.3, kubuntu8.04에서 실행결과 134518156 -1208255040 134513657 0 가 나왔습니다.
표준이 아닌건 확실하고, 전부 0이 나온건 컴파일러확장일듯하네요.

정상인의 이미지

일단 제가 오래 코딩을 안해서 다 까먹었고 가비지값이 나오는게 정상인거 같습니다.
혹시 x64용 리눅스를 쓰는게 차이가 나는지는 모르겠습니다만 -_-; 불행히도 그 분의 컴퓨터와 제 컴퓨터의 환경 차이는 이정도밖에 안 보입니다.

klara의 이미지

x64용 리눅스를 쓰는거보다 중요한건 무슨 컴파일러를 쓰냐는 거죠.
코드는 컴파일러가 만들어내니까요.
같은 gcc라고 해도 표준이 아닌 부분이라면 버전에따라서 동작방식이 다른 경우도 있구요.

chungsy02의 이미지

어떤 컴파일러가 어떤 실수를 허용해주는지 궁금하신지는 모르겠습니다.
하지만 코딩을 할 때에는 저런 경우 가비지값이 들어간다고 가정하는게 맞습니다.

예전에 누군가가 포트란(f77)에서 짠 소스코드를 받은 적이 있었습니다.
코딩하신 분이 나이드신 원자물리학자셨는데 전문 프로그래머가 아니시다 보니
컴파일러에서 허용하는 범위 내에서 아주 자유롭게(?) 코딩을 하셨습니다.
그래서 원래 코딩한 윈도우용 컴팩 포트란에서는 컴파일이 되었는데
리눅스의 g77이나 gfortran에서는 아무리 해도 정상적인 컴파일이 안되더군요.
리눅스에서 컴파일한 코드에서는 다른 결과가 나왔습니다.

컴파일러에서 이것저것 허용해주는 것이 도리어 사람들과 소스코드를 나쁜 길로 이끄는 것 같습니다.

정상인의 이미지

감사합니다:)덕에 확실해졌습니다.

댓글 달기

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