六、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)
原创粉丝点击