--------------------------------------------------linux C编程--------------------------------------------------
标准c:
E.g:
#include ---> 函数原型声明
int main()
{
printf("hello !\n");
return 0;
}
*.c ---> *.i ----> *.S ----> *.o -----> elf (类似于bin exe)
预处理 编译器 汇编器 链接
链接: 将各个语句段和数据进行地址编排,重定位执行顺序及地址 ----> 单片机(分散加载:ro rw)
★快速打开编辑环境:
sudo gedit test.c
(1) linux 系统是多任务操作系统,需要知道各个任务执行返回的结果,所以需要有返回值。
E.g
int main()
{
printf("hello !\n");
return 0; ----> 0:成功执行完毕 , 负数:运行异常
}
(2)linux系统在运行程序时,可以给程序传递运行参数,所以main程序可以带形参。
E.g
int main(int argc ,char **argv)
{
printf(" arg = %d\n",argc);
return 0; ----> 0:成功执行完毕 , 负数:运行异常
}
其中:
argc ---> 指示当前命令行传递的参数个数
argv ---> 指示当前命令行传递的参数内容
3) 所调用的库函数均需要声明或者自定义----> 需要包含对应的头文件。
E.g:
#include ---> 函数原型声明
int main()
{
printf("hello !\n");
return 0;
}
补充:在Linux系统中,可使用 man 3 printf 获取头文件信息(q:退出查询 3:代表查询的是第3本手册)
4) 编译程序
gcc test.c ---> 得到a.out(该文件为UNIX 默认生成文件,Linux袭用)
gcc test.c -o test --->将test.c的C文件编译成名为test的elf可执行程序
5) 查看生成文件的属性
file test
test: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x12872754343d99b267f3580e3d2e5829b5304273, not stripped
文件类型: ELF ---> linux 可执行程序的格式
属性: executable ----> 可执行
链接方式: dynamically linked (uses shared libs) 动态链接
符号优化: not stripped ---> 符号信息完整,未被删除 ---> 提供于程序调试
6)执行程序
./test ----> 表示在当前路径运行test
程序示例:
#include
int main(int argc, char **argv)
{
int i;
printf("Hello World!\n");
printf(" arg = %d\n",argc);
for(i=0;i
printf(" argv[%d] = %s\n",i,argv);
return 0;
}
结果如下:
zhoujd@ubuntu:~/test_c$ ./test
Hello World!
argc = 1
argv[0] = ./test
zhoujd@ubuntu:~/test_c$ ./test 123
Hello World!
argc = 2
argv[0] = ./test
argv[1] = 123
zhoujd@ubuntu:~/test_c$ ./test 123 15647869789
Hello World!
argc = 3
argv[0] = ./test
argv[1] = 123
argv[2] = 15647869789
用户1773117 2014-8-9 08:33
用户1435822 2014-8-7 08:24