book@100ask:~/C_coding/CH02$ cat main.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello!\n");
return 0;
}
book@100ask:~/C_coding/CH02$ make main
cc main.c -o main
book@100ask:~/C_coding/CH02$ ./main
Hello!
book@100ask:~/C_coding/CH02$ echo $?
0
返回值是給函數的父進程看的. 當前程序在shell下執行,其父進程就是shell
如果不定義返回值,則該值是最後一條語句有效執行的字符數
book@100ask:~/C_coding/CH02$ cat main.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
printf("argc = %d\n",argc);
// return 0;
}
book@100ask:~/C_coding/CH02$ make main
cc main.c -o main
book@100ask:~/C_coding/CH02$ ./main
argc = 1
book@100ask:~/C_coding/CH02$ ./main abc 123 hello
argc = 4
book@100ask:~/C_coding/CH02$ ls /etc/a*.conf
/etc/adduser.conf /etc/apg.conf /etc/appstream.conf
book@100ask:~/C_coding/CH02$ ./main /etc/a*.conf
argc = 4
argc是計數器,用於記錄從終端上到底傳了多少個參數過來
argv是列表,用於保存傳遞過來的參數,元素的個數取決於argc的數值;
book@100ask:~/C_coding/CH02$ cat main.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
int i;
printf("argc = %d\n",argc);
for(i = 0 ; i < argc; i++)
puts(argv[i]);
return 0;
}
book@100ask:~/C_coding/CH02$ make main
cc main.c -o main
book@100ask:~/C_coding/CH02$ ./main
argc = 1
./main
book@100ask:~/C_coding/CH02$ ./main 123 abc
argc = 3
./main
123
abc
book@100ask:~/C_coding/CH02$ ./main 123 abc /etc/a*.conf
argc = 6
./main
123
abc
/etc/adduser.conf
/etc/apg.conf
/etc/appstream.conf
argv是一個數組,每個元素都是一個char*,最後一個元素爲空指針NULL
book@100ask:~/C_coding/CH02$ cat main.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
int i;
printf("argc = %d\n",argc);
for(i = 0 ; argv[i] != NULL; i++)
puts(argv[i]);
return 0;
}
book@100ask:~/C_coding/CH02$ make main
cc main.c -o main
book@100ask:~/C_coding/CH02$ ./main
argc = 1
./main
當被調函數在主調函數之後時,需要在主調函數前面加被調函數的聲明。
注意,被調函數的類型,與聲明的函數類型保持一致,否則編譯會報警(編譯器會認爲聲明的函數與被聲明的函數不是一個函數)。