[완료]c를 처음 접해보는 초보입니다.

synn의 이미지

안녕하세요. 눈팅을 주로 하다가 이번에 방통대를 입학하면서 처음으로 c를 접해보는 newbie입니다. :)

공부를 하다가 궁금한 점이 생겨서 글을 쓰게 되었습니다.

c를 작성하다 보면 무조건적으로 "main()"함수를 사용하는 거 같은데, 이것의 사용법(?)을 잘 모르겠습니다.

editplus의 "hello world"를 보면

int main(int argc, char *argv[])

라고 되어 있는데, 어느 때 int main()함수를 써야 하는 건지, 또 소괄호 안에 int argc, char *argv[]는 왜 넣어야 하는지 궁금하네요. 검색을 잘못 한건지 무슨 내용인지도 잘 모르겠고....

혼자 끙끙 대다가 염치없이 글을 써봅니다. :)

시원한 답변 부탁드립니다.

klara의 이미지

int main int argc char **argv 만으로 검색해도 줄줄이 나오네요.
'검색을 잘못한 것'과 '무슨 내용인지 모르겠다'는 원인과 결과의 관계가 아닙니다.
검색으로 나온 내용이 이해가 안된다면, 그 내용을 인용하여 어떤 부분이 이해가 안되는지를 질문해주세요.
어차피 질문 내용만으로는 검색하면 금방 나올거같은 내용 이상의 대답은 기대하기 어려우실 것입니다.

synn의 이미지

음...단순하게 개념을 잡기가 힘들다는 얘기였습니다. 이해를 해야 하는데, 이해가 되지 않는 그런거죠.

왜 main안에 int argc, char *argv[]가 있고,

어떤 때에는 int main(void)이고, 어떤 때는 main()이고.....

세벌의 이미지

int main(int argc, char*argv[])
이런 식으로 써서 만든 소스를 컴파일해서 나온 실행 파일이 a 라고 합시다.
그 실행파일 a 를 실행시킬 때 매개변수 받은 것을 활용하기 위해 씁니다.
예를 들어 실행파일 a 가 입력 받은 임의 갯수의 숫자를 더하는 프로그램이라면
a 1 254 258
이런 식으로 실행하면 1+254+258 의 결과를 출력 시킬 수 있도록 하는 거죠.
int main() 이런 식으로 해 놓은 것은 실행시킬 때 매개변수 받을 필요가 없다는 거고...

http://sebul.sarang.net/

muzie의 이미지

C 프로그램은 main 함수로부터 시작됩니다.
프로세스를 생성해내는 것은 OS이고(뭐 실제로는 부모프로세스가 되겠지만) int main(어쩌구)에서 int 는 반환형으로 프로그램이 종료될 때 OS에 리턴값을 넘겨주는 역할을 합니다. 일반적으로 void형이 아닌 대부분의 함수와 똑같은 역할이겠죠.

안에 들어가는 값(파라미터) 역시 일반 함수를 call 할때 쓰이는것과 마찬가지입니다.
다만 프로그램 실행시에 main함수에 넘겨주는 역할을 하지요.

int argc는 아규먼트의 개수,
만약에 프로그램 이름이 test이고 ./test 만 입력하여 실행하는 프로그램이라면 argc의 개수는 1개가 되겠고 char* argv의 첫번째 포인터(인덱스 0번)가 가리키는 아규먼트 이름은 test가 됩니다.

만약에 프로그램 실행시에 다른 아규먼트를 입력 받아야 한다면 순차적으로 증가하게 되겠죠.

예로 이런 코드를 보시면 어느정도 이해가 가시리라 봅니다.

................................. test.c .....................................
#include <stdio.h>
 
int
main(int argc, char* argv[])
{
    int cnt = 0;
    printf("arg c = %d\n", argc);
    for (cnt = 0 ; cnt < argc ; cnt++)
        printf("argv[%d] = %s\n",cnt, argv[cnt]);
    return 0;
}
..............................................................................

컴파일 : gcc -o a test.c
shell> ./a
arg c = 1
argv[0] = ./a
shell> ./a 1 2
arg c = 3
argv[0] = ./a
argv[1] = 1
argv[2] = 2

일단 예제부터 작성해보세요 :)

...흠 -_-; 코드가 이상하게 붙는군요-_-;;
잘 알아서 수정해서 해보시기 바랍니다 --;

vacancy의 이미지


http://www.acm.uiuc.edu/webmonkeys/book/c_guide/1.3.html

여기를 참고하세요.

표준에서 말하는 main의 prototype은 두 가지로,

int main(void)
int main(int argc, char *argv[])

입니다.

main() 같은 식으로 정의하는 것은 옛날 방식입니다.

synn의 이미지

답변 감사합니다. 아직은 잘 모르겠는데, 답변 달아주신 것들 차근차근 곱씹어 가면서 읽어봐야 겠네요. :>

candi의 이미지

아직 메인함수에 대해 파악하시려고 하시는것보다
자료형 같은 사용방법에 익숙해 진다음에 이해하시는게 훨씬 쉬울껍니다

---------------------------
@beramodo

댓글 달기

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