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住!!!

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

  • 相关阅读:
    Kibana
    Filebeat使用
    leetcode刷题笔记七十三题 矩阵置零
    leetcode刷题笔记七十二题 编辑距离
    leetcode刷题笔记七十一题 简化路径
    leetcode刷题笔记七十题 爬楼梯
    leetcode刷题笔记六十九题 X的平方根
    python 冒泡算法
    hive 函数
    Task07:类、对象与魔法方法(3天)
  • 原文地址:https://www.cnblogs.com/cnlg/p/4245234.html
Copyright © 2011-2022 走看看