六、Linux——malloc、Makefile
来源:互联网 发布:掃描sql 编辑:程序博客网 时间:2024/05/26 09:56
【1】存储模型
1、生命期:变量占据内存的时间期限--静态变量和动态变量 2、作用域:变量出现的有效区域---局部变量和全局变量
【2】malloc (手动分配和释放)
void *malloc(size_t size); 功能:申请size个字节大小的空间 返回值:就是这段申请的首地址 void free(void *ptr); 功能:释放堆区手动申请的空间 malloc 和 free 一般是配对使用,有申请一般都有释放
【3】Makefile
target : dependency_files <TAB> command 1--- gcc -c main.c -o main.o gcc main.o -o main main:main.o main.o:main.c 2--- gcc -c main.c -o main.o gcc -c add.c -o add.o gcc -c sub.c -o sub.o gcc *.c -o main 3--- $< 第一个以依赖文件的名称 $+ 所有的依赖文件,以空格分开,并且出现的先后为序 $^ 所有不重复的依文件,以空格分开 $@ 目标文件的完整名称 $* 不包含扩展名的目标文件名称 $? 所有时间戳比目标文件晚的依赖文件,并以空格分开 $% 如果目标是归档成员,该变量表示目标的归档成员名称
源码及注释
1、register.c
#include <stdio.h>int main(int argc, const char *argv[]){ register int i, j; //寄存器成员变量 for(i=0; i<1000; i++) { for(j=0; j<10000; j++) { printf("%d\n",i*j); } } return 0;}
2、static.c
#include <stdio.h>//与程序同步//只初始化一次//默认初始化为0int fun(){ static int a; //静态成员变量 a += 5; printf("a = %d\n",a); return 0;}int main(int argc, const char *argv[]){ fun(); fun(); fun(); return 0;}
4、多文件工程
1.c#include <stdio.h>int a = 12;int b = 9;int fun(){ printf("hello\n");}2.c#include <stdio.h>extern int a; //extern,引入外部变量extern int b;extern int fun();int main(int argc, const char *argv[]){ printf("add = %d\n", a+b); fun(); return 0;}
4、malloc.c
#include <stdio.h>#include <stdlib.h>#include <string.h>//void *malloc(size_t size);//void free(void *ptr);#define N 32char *fun(){ char *p = (char *)malloc(N * sizeof(char)); //开辟size字节空间 //返回空间的首地址 strcpy(p,"saber"); return p;}int main(int argc, const char *argv[]){ char *w = fun(); printf("w = %c\n",*(w+4)); free(w); //释放的是w所指向的动态内存空间 w = NULL; //防止野指针的形成 return 0;}
5、malloc.c
#include <stdio.h>#include <stdlib.h>typedef struct str{ int a; int b;}data_t; //data_t:类型名int main(int argc, const char *argv[]){ data_t *p = (data_t *)malloc(sizeof(data_t)); p->a = 10; p->b = 'K'; printf("a = %d\n",p->a); printf("b = %c\n",p->b); free(p); p = NULL; return 0;}
6、Makelick 实例
add.c:int add(int a, int b){ return a+b;}sub.c:int sub(int a, int b){ return a-b;}main.c#include "head.h"int main(int argc, const char *argv[]){ printf("add = %d\n", add(N, 7) ); printf("add = %d\n", sub(N, 7) ); return 0;}head.h#ifndef _HEAD_H_#define _HEAD_H_ //全局变量 头文件的包含 函数的声明 宏#include <stdio.h>extern int add(int a, int b);extern int sub(int a, int b);#define N 13#endifMakefilemain:main.o add.o sub.o gcc main.o add.o sub.o -o mainmain.o:main.c head.h gcc -c main.c -o main.oadd.o:add.c gcc -c add.c -o add.osub.o:sub.c gcc -c sub.c -o sub.o.PHONY: clearclear: rm *.o mainOBJS = mainCFLAGS = -c -Wall -O2CC = gcc$(OBJS):$(OBJS).o add.o sub.o $(CC) $^ -o $@$(OBJS).o:main.c head.h $(CC) $(CFLAGS) $< -o $@add.o:add.c $(CC) $(CFLAGS) $< -o $@sub.o:sub.c $(CC) $(CFLAGS) $< -o $@.PHONY: clearclear: rm *.o $(OBJS)
阅读全文
0 0
- 六、Linux——malloc、Makefile
- linux高级编程六Makefile
- linux——makefile学习
- Makefile(六)
- linux malloc
- linux下Makefile学习之六(使用函数)
- linux编程——makefile文件
- 【linux】——makefile书写规则
- Linux学习——Makefile工程管理
- Linux C语言程序设计(十)——makefile
- Linux编程——Makefile 使用
- Linux技术——makefile基础
- Linux学习笔记——Makefile教程
- linux—makefile编译规则(一)
- linux多文件编译—makefile
- 内核映像的形成 —— MakeFile预备知识(六)
- 跟我一起写 Makefile (六)——使用条件判断
- Makefile 学习日记(六)——.c和.h不在同路径下的编译
- oracle11g导入oracle10g dmp文件,导出dmp文件
- java 操作hdfs 实例
- 浏览器滚动条的处理
- JQuery 更改属性 JQ对象循环 each 全选反选 三元运算
- PAT (Advanced Level) Practise 1059 Prime Factors (25)
- 六、Linux——malloc、Makefile
- iOS 10前后两种本地通知
- 让linux开发板联网
- jquery-easyUI第一篇【介绍、入门、使用常用的组件】
- 初识htpp与tcp
- Ajax交互扩展
- C语言-蛇形矩阵(2)
- SystemUI消失、出现的控制
- spring boot 返回json案例demo