프로그램 컴파일시 왜이렇게 되눈지...

익명 사용자의 이미지

질문 세가지 하겠습니다.

1.
제가 프로그램을짜서 컴파일을 해서 실행파일을 만들려고 하눈데
안됩니다. 이유가 뭔지 잘....전문가님들 부탁합니다.

******************************
int myarray[1000]={1,2,3,4};
void main(int argc,char *argv[])
{
myarray[0]=3;
}
**************************
이 프로그램인데여
컴파일 하려고
#gcc -o file file.c 이렇게 치면여
file.c In function 'main';
file.c 3 warning return type of 'main' is not 'int'
이렇게 나옵니다.
그리고 file.o 도 생성이 안됩니다.
어떻게 하면 컴파일되서 실행파일이 만들어 질까요?

2.
#httpd start
를 치면은
bashhttpdcommand not found
라고 나옵니다.
이유가 뭘까요?
다른데서 설명을 보면 이렇게 치면 실행된다고 하던데....

3.
하나더 질문하면여~~
두 프로그램이 실행파일 크기가 다르게 나온다고 합니다.
둘 사이에 차이가 별로 없눈거 같은데 이유가 뭔지 궁금합니다.
file1.c
******************************
int myarray[1000]={1,2,3,4};
void main(int argc,char *argv[])
{
myarray[0]=3;
}
**************************

file2.c
******************************
int myarray[1000];
void main(int argc,char *argv[])
{
myarray[0]=3;
}
**************************
이렇게 두파일입니다.
실행파일 크기가 다른 이유가 뭔가요?
궁금합니다.

익명 사용자의 이미지


답변 세가지 하겠습니다.

1. 실행파일 만들어졌습니다.
gcc 실행시킨 디렉토리에서 ./file 이라고 실행시켜보십시오.
warning 나온 것은 말 그대로 main 함수는 int 를 리턴해야 하는데
void 타입으로 정의하셔서 나온 것입니다.
(컴파일러마다 이런 제한을 두는 놈도 있고 그렇지 않은 놈도 있습니다.)
int main(int argc, char *argv[])
{
...
return 0;
}

정도로 바꿔보십시오.
main 함수의 리턴형을 int 로 해야하느냐, void로 해도 되느냐,
main 함수를 끝낼때는 exit()함수를 쓰는게 좋으냐,
return 문을 쓰는게 좋으냐, 그냥 아무일도 안 하는게 좋으냐는
말들이 많으니, 말씀하신 warning이 발생한다고 해도
별로 긴장하실 필요없습니다.
'열심히' 하시다보면 나중에 이해될 것입니다.
file.o 를 보고 싶으시면
gcc -c file.c 라고 쳐 보시기 바랍니다.

file.o 는 목적파일 또는 오브젝트 파일 또는 쩜오(.o) 파일이라고
하고 실행파일은 아닙니다. 유닉스에는 실행파일이 특정 확장자와
연결되어 있지 않습니다.

# gcc file.c
라고만 치면 실행파일은 a.out 이 됩니다.

2. 명령을 찾을 수 없다는 것입니다.
여러 이유가 있습니다.
i) 진짜로 httpd가 시스템에 안 깔려있다.
=> 가져가 까시면 됩니다.
ii) PATH 가 제대로 설정되어 있지 않다.
=> PATH에 대해서 공부를 더 해보시기 바랍니다.
echo $PATH 라고 쳐 보시면 뭐라고 나올 것입니다.
/bin/usr/bin
정도가 나온다면 /bin 이나 /usr/bin 에 있는 명령만을
실행시킬 수 있습니다. PATH를 적절하게 변경해 주시기 바랍니다.

3. 하나는 초기화된 변수이고 또 하나는 초기화되지 않은 데이터이기
때문입니다.
int myarray[1000]; 은 초기화되지 않은 데이터이고,
int myarray[1000] = {1, 2, 3, 4}; 은 초기화된 데이터입니다.
myarray의 크기를 1000에서 100000 쯤으로 바꿔보시면
그 차이를 아실 것입니다.
컴파일 해서 만든 프로그램을 nm 으로 보시면 그 차이를
확인하실 수있을 것입니다.
file1.c 에서 만든 실행파일을 file1,
file2.c는 file2 라고 한다면
# nm -s file1 | grep myarray

# nm -s file2 | grep myarray
를 실행시켜 보세요.

하나는 .data 영역에, 또 하나는 .bss 영역에 있을 것입니다.
.data 영역은 특정값으로 초기화된 데이터로,
초기화를 위해서는 그 내용이 당연히 파일에 들어있어야 합니다.
따라서 1000개의 int 변수를 초기화할 내용이 실행파일에 들어있습니다.
.bss (block started by symbol) 영역은 초기화되지 않은 영역으로
실행파일이 메모리로 읽힐 때 그 영역은 0으로 초기화됩니다.
전체변수를 초기화하지 않으면 그 값이 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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.