zoukankan      html  css  js  c++  java
  • Makefile总结和反序字符数组,整体右移数组,杨辉三角!

    2015.1.23
    今天我值日
    继续接着昨天Makefile的目标开始记录:
    第一种:有 .PHNOY声明,但是冒号后面没有依赖文件
    .PHNOY:clean
    clean://没有依赖文件
    rm *.0 temp

    第二种:冒号前后的文件没有直接的依赖关系也可以没有依赖文件
    .PHNOY:all
    1 all: main.o f1.o f2.o f3.o
    2 gcc -o all main.o f1.o f2.o f3.o
    3 main.o: main.c
    4 gcc -c main.c -o main.o
    5 f1.o: f1.c
    6 gcc -c f1.c -o f1.o
    7 f2.o: f2.c
    8 gcc -c f2.c -o f2.o
    9 f3.o: f3.c
    10 gcc -c f3.c -o f3.o
    11 clean:
    12 rm main.o f1.o f2.o f3.o
    13

    第三种:all 有 .PHNOY声明,也有依赖文件,但是没有命令行
    .PHNOY:all
    1 all: main.o f1.o f2.o f3.o

    3 main.o: main.c
    4 gcc -c main.c -o main.o
    5 f1.o: f1.c
    6 gcc -c f1.c -o f1.o
    7 f2.o: f2.c
    8 gcc -c f2.c -o f2.o

    第四种: 没有 .PHNOY声明

    clean:
    clean://没有依赖文件
    rm *.0 temp

    伪目标的功能:把多个目标文件写成伪目标,可以同时生成,例子如下:
    1 all: main.o f1.o f2.o f3.o
    2 gcc -o all main.o f1.o f2.o f3.o
    3 main.o: main.c
    4 gcc -c main.c -o main.o
    5 f1.o: f1.c
    6 gcc -c f1.c -o f1.o
    7 f2.o: f2.c
    8 gcc -c f2.c -o f2.o
    9 f3.o: f3.c
    10 gcc -c f3.c -o f3.o
    11 clean:
    12 rm main.o f1.o f2.o f3.o
    13 rebuild :all clean //两个伪目标,

    执行的时候输入:make rebuild

    注:伪目标可以层层嵌套:
    all:*****about
    about:****hello
    hello:********

    make中特殊符号的用法:
    1 all: main.o f1.o f2.o f3.o
    2 gcc -o all main.o f1.o f2.o f3.o
    3 main.o: main.c
    4 -gcc -c main.c -o main.o //前面加-号,如果出错了忽略错误,继续执行
    5 f1.o: f1.c
    6 @gcc -c f1.c -o f1.o //前面加@号,如果出错了,立即终止
    7 f2.o: f2.c


    make -s 表示执行时命令行不输出
    make -f name 告诉make去找的名字是name,不是Makefile
    make 后面不接目标,系统默认生成第一行的目标文件,后面的目标需要指定,比如上面例子的:make clean

    Makefile总结:
    1. make工具默认Makefile
    GNUmakefile > makefile > Makefile

    2.make -s CC=gcc all
    命令行的宏定义 > Makefile定义 > shell定义 > 预定义

    3.变量引用:$(),${},单字符可以直接引用;如:C=gcc ,引用:$C

    4.Makefile的基本语法格式:
    目标文件:依赖文件
    命令行
    可没有命令行,但是依赖文件必须有
    5.Makefile格式转换函数
    patsubst
    wildcard

    SRCS = $(wildcard *.c) //将当前目录下的所有点C文件赋给SRCS
    SRCS = $(patsubst %.c,%.o,<目录或者文件等>) //将<目录或者文件等>中的所有.c文件替换成.o文件并赋给SRCS

    %.o: %.c
    gcc -c $< -o $@
    上面两句的意思是将任意的.c文件转换成.o文件!

    6.Makefile预定义变量:

    $@ 目标的完整名称
    $+ 所有依赖文件,并已空格分开,
    $< 第一个依赖文件的名称
    $* 不包含扩展名的目标名称
    $? 所有依赖文件,并已空格分开,主要是所有改过的文件
    $^ 所有依赖文件,并已空格分开,不包含重复的依赖文件


    7.make中特殊符号的用法:
    1.前面加-号,如果出错了忽略错误,继续执行
    2.前面加@号,如果出错了,立即终止
    1 all: main.o f1.o f2.o f3.o
    2 gcc -o all main.o f1.o f2.o f3.o
    3 main.o: main.c
    4 -gcc -c main.c -o main.o //前面加-号,如果出错了忽略错误,继续执行
    5 f1.o: f1.c
    6 @gcc -c f1.c -o f1.o //前面加@号,如果出错了,立即终止


    突然想实现将一个二维数组里面的多个字符传逐个倒序后输出来:这里用了宏定义,方便更改数组大小!

    #include <stdio.h>
    #include <string.h>

    #define M 3
    #define N 6

    void Inverse(char str_array[][N]);

    int main(char argc,const char * * argv)
    {
    char i,j;
    char str_array[M][N]={"hello","every","one"};

    for(i = 0; i < M; i++)
    for(j = 0; j < N; j++)
    {
    printf("%c",str_array[i][j]);
    if(j == N-1)
    {
    putchar(' ');
    }

    }
    putchar(' ');

    Inverse(str_array);
    for(i = 0; i < M; i++)
    for(j = 0; j < N; j++)
    {
    printf("%c",str_array[i][j]);
    if(j == N-1)
    {
    putchar(' ');
    }

    }
    putchar(' ');
    return 0;

    }
    void Inverse(char str_array[][N])
    {
    char (*p)[N], (*q)[N];
    char i, j, k;

    for(i = 0; i < M; i++)
    {
    p = q = str_array;
    j = 0;
    while(*(p[i]+j))
    {
    j++;
    }
    j--;
    k = 0;
    if((p[i]+j) > q[i])
    {
    *(p[i]+j) ^= *(q[i]+k);
    *(q[i]+k) ^= *(p[i]+j);
    *(p[i]+j) ^= *(q[i]+k);
    j--;
    k++;

    }



    }
    }

    程序运行结果:
    root@lg-desktop:/mnt/hgfs/source test/test# gcc text7.c
    root@lg-desktop:/mnt/hgfs/source test/test# ./a.out
    hello every one
    oellh yvere eno
    root@lg-desktop:/mnt/hgfs/source test/test#

    将二维数组整体向右移动一列,并将最后一列放到原来第一列的位置:

    #include <stdio.h>

    #define M 2
    #define N 3

    int main(char argc,const char * * argv)
    {
    int array[M][N] = {1,4,6,8,10,12};
    int i, j, temp;

    for(i = 0; i < M; i++)
    {
    for(j = 0; j < N; j++)
    {
    printf("%d ",array[i][j]);
    }
    putchar(' ');
    }

    for(i = 0; i < M; i++)
    {
    temp = array[i][N-1];

    for(j = N-1; j > 0; j--)
    {
    array[i][j] = array[i][j-1];
    }
    array[i][0] = temp;
    }

    for(i = 0; i < M; i++)
    {
    for(j = 0; j < N; j++)
    {
    printf("%d ",array[i][j]);
    }
    putchar(' ');
    }
    }


    程序执行效果:
    root@lg-desktop:/mnt/hgfs/source test/test# gcc text5.c
    root@lg-desktop:/mnt/hgfs/source test/test# ./a.out
    1 4 6
    8 10 12
    6 1 4
    12 8 10
    root@lg-desktop:/mnt/hgfs/source test/test# ^C


    杨辉三角:

    #include <stdio.h>

    #define M 10 //控制杨辉三角长度

    int main(char argc,const char * * argv)
    {
    int i, j;
    int a[M][M];

    printf(" ");

    for(i = 0; i < M; i++)
    {
    a[i][0] = 1;
    a[i][i] = 1;
    }

    for(i = 2; i < M; i++)
    {
    for(j = 1; j < i; j++)
    {
    a[i][j] = a[i-1][j-1] + a[i-1][j];
    }
    }

    for(i = 0; i < M; i++)
    {
    for(j = 0; j <= i; j++)
    {
    printf("%5d",a[i][j]);
    }
    putchar(' ');
    }
    return 0;

    }

    root@lg-desktop:/mnt/hgfs/source test/test# gcc text4.c
    root@lg-desktop:/mnt/hgfs/source test/test# ./a.out

    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    1 5 10 10 5 1
    1 6 15 20 15 6 1
    1 7 21 35 35 21 7 1
    1 8 28 56 70 56 28 8 1
    1 9 36 84 126 126 84 36 9 1
    root@lg-desktop:/mnt/hgfs/source test/test#

    今天Linux系统基础知识学完了,相比前两天,今天接触到的新内容比较少,分析了一些数组的程序,还是很有收获的,上面的几个程序也是很好玩的
    这两天也开始为毕业论文了,基于DSP的交流伺服系统的设计,认真的看完一段电机的三闭环控制和矢量控制技术后,难度级别比我想象的要大,
    现在培训嵌入式,自学PCB设计,加上要做毕业论文,感觉时间挺紧的,换个角度想,这个毕业论文我要是能很好的做出来,对我在强电方便的知识扩展
    还是很不错的,hold住,hold住!!!

    **********************************************************************************************************************************************************
    **********************************************************************************************************************************************************
    **********************************************************************************************************************************************************

  • 相关阅读:
    WCF 第十三章 可编程站点 为站点创建操作
    WCF 第十三章 可编程站点 所有都与URI相关
    WCF 第十二章 对等网 使用自定义绑定实现消息定向
    WCF 第十三章 可编程站点 使用WebOperationContext
    Using App.Config for user defined runtime parameters
    WCF 第十三章 可编程站点
    WCF 第十三章 可编程站点 使用AJAX和JSON进行网页编程
    WCF 第十二章 总结
    WCF 第十三章 可编程站点 使用WebGet和WebInvoke
    WCF 第十三章 可编程站点 URI和UriTemplates
  • 原文地址:https://www.cnblogs.com/cnlg/p/4245234.html
Copyright © 2011-2022 走看看