지역변수와 전역변수 초기값

rootuser7의 이미지

안녕하세요 ?
초보적인 질문이긴 한데요... 실제 프로그램 예제마다 좀 다르게 coding이 되어 있어서 문의를 드립니다.

C언어에서 함수내에 사용되는 지역(자동)변수를 초기화 하지 않고 실행했을 때, default값은 0으로 초기화 되는지요 ?
아니면, 쓰레기값으로 초기화 되는지요 ?
또한 C언어에서 전역 변수를 초기화 하지 않고 실행했을 때, default값은 0으로 초기화 되는지요 ?
아니면, 쓰레기값으로 초기화 되는지요 ?

즉…
int gloval_value;
int main(void)
{
int local_value;

return 0;
}
을 컴파일 후 실행시에 gloval_value과 local_value의 최초값은 어떤 값이 들어가 있습니까?

답변 감사드립니다.

ifree의 이미지

그 메모리 주소에 있던 값이 그대로 들어가겠죠.
하여튼 변수 선언하고 초기화하지 않고 쓰는 일은 우간다에서는 상상도 할 수 없는 일입니다.
한국에서는 어떠신지.

pastime의 이미지

global_value는 0으로 초기화되고 (.bss 영역에 들어가죠)
local_value는 알 수 없습니다.

rubenz의 이미지

무조건 쓰기전에 초기화해서 써야 안심입니다.
자동을 믿지 마세요~~~!!

tj의 이미지

무조건 초기화가 오히려 위험한게 조건부로 사용되는 로컬 변수들의 경우 무조건 초기화를 해버리면 컴파일러가 초기화되지 않은 값 사용을 잡아내 경고해줄 수 없습니다. 컴파일러가 경고해주면 고치면 될 걸 엉뚱한 초기값으로 실행하는 경우가 생기고 장기적으로 관리성도 떨어집니다. 의도를 가장 왜곡없이 동료 프로그래머와 컴파일러에게 전달할 수 있는 코드를 쓰는 게 좋은데 의미없는 초기화 같은 건 코드 작성자의 의도를 불분명하게 합니다.

rubenz의 이미지

글에 분명 그냥 쓰기전에 초기화라는 의미 였습니다. 그리고 초기화가 프로그래머의 의도를 왜곡한다는 것은 제가 좀 몰라서 그런지 처음 들었습니다. 컴파일러가 경고를 하면 수정하는 것도 어차피 초기화라고 생각 됩니다. 동료 프로그래머가 초기화 경고를 보고 수정하라는 뜻이라면, 더욱 힘들지 않을까 생각 됩니다.

tj의 이미지

음, 오해인가요? 예를 들면

int a;

....
if (xxx which implies yyy)
a = x;
....
if (yyy)
b = 2 * a;

이런 코드가 있을 때, int a = 0; 이런식으로 초기화해버리면 좋지 않다는 뜻이었습니다. 로직상 쓰레기 값인 경우엔 쓰레기 값이도록 두는 게 좋습니다.

무조건 쓰기전에 초기화라는게 어떤 의미인가요? if (xxx) a = x; 를 무조건 쓰기전 초기화라고 부르긴 힘들 것 같은데요.

asiawide의 이미지

보통 전역변수가 있는 영역은 프로그램 실행전에 0으로 밀어버립니다. 그래서 초기화를 안해도 0이 들어가 있죠. 그러나 임베디드 쪽에서는 간혹 이 부분을 생략하는 경우가 있다고도 합니다. C 코딩 하다가 잘 모르겠는 부분은 암시적으로는 문제가 없더라도 명시적으로 써주는게 좋은 것 같습니다. (물론 이걸 싫어하는 분들도 있기는 하죠.)

댓글 달기

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