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('\t');
}
}
putchar('\n');
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('\t');
}
}
putchar('\n');
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\t",array[i][j]);
}
putchar('\n');
}
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\t",array[i][j]);
}
putchar('\n');
}
}
程序执行效果:
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("\n");
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('\n');
}
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住!!!
**********************************************************************************************************************************************************
**********************************************************************************************************************************************************
**********************************************************************************************************************************************************
Makefile总结和反序字符数组,整体右移数组,杨辉三角!的更多相关文章
- Java数组的应用:案例:杨辉三角,三维数组,字符串数组
//import java.util.Arrays; //包含Arrays //import java.util.Random; public class HelloWorld { public st ...
- Java的二维数组的应用及杨辉三角的编写
(1) 编写一个程序,生成一个10*10的二维随机整数数组,并将该数组的每行最大值保存于一个一维数组中,将每列平均值保存于另外一个一维数组中并分别输出. (2) 编程输出杨辉三角的前10行. 找出一个 ...
- 实验----Java的二维数组的应用及杨辉三角的编写
(1) 编写一个程序,生成一个10*10的二维随机整数数组,并将该数组的每行最大值保存于一个一维数组中,将每列平均值保存于另外一个一维数组中并分别输出. (2) 编程输出杨辉三角的前10行. 找出一个 ...
- java基础:进制详细介绍,进制快速转换,二维数组详解,循环嵌套应用,杨辉三角实现正倒直角正倒等腰三角,附练习案列
1.Debug模式 1.1 什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序. 1.2 Debug介绍与操作流程 如何加断点 选择 ...
- 以杨辉三角为例,从内存角度简单分析C语言中的动态二维数组
学C语言,一定绕不过指针这一大难关,而指针最让人头疼的就是各种指向关系,一阶的指针还比较容易掌握,但一旦阶数一高,就很容易理不清楚其中的指向关系,现在我将通过杨辉三角为例,我会用四种方法从内存的角度简 ...
- java二维数组定义初始化-杨辉三角
public class Array2Demo2_3 { public static void main(String[] args) { //定义初始化 int[][] arr = new int[ ...
- 2017.12.10 Java写一个杨辉三角(二维数组的应用)
杨辉三角的定律 第n行m列元素通项公式为: C(n-1,m-1)=(n-1)!/[(m-1)!(n-m)!] 需要用到创建二维数组 package com.glut.demo; /** * 杨辉三角 ...
- C语言:二维数组,(杨辉三角)
二维数组:一维数组中的元素又是一个数组.声明的语法:数据类型 数组名[一维长度][二维长度]; int num[3][2]; 注意:int[][2];正确 int[2][];错误 二维数组中: 一维可 ...
- java基础之二维数组-杨辉三角
首先呢你要知道什么是杨辉三角? 答:杨辉三角,是二项式系数在三角形中的一种几何排列. 简单的说一下就是两个未知数和的幂次方运算后的系数问题,比如(x+y)的平方=x的平方+2xy+y的平方,这样系数就 ...
随机推荐
- androidStudio中如何加载字体资源?
在android中字体的格式总是不能尽善尽美的显示出来 , 于是要求我们使用一些有美感的字体,加载的方式(就像HTML的字体一样),我们需要通过加载字体的方式来使用android中不曾提供的字体; ...
- OC 实例变量(Instance Var)和成员变量(member var)区别
摘要: Objective-C 引入了“实例变量"的概念,但同时, 也经常出现 “成员变量”的声音. 到底什么是实例变量,什么是成员变量,二者的区别是什么呢? 今天查看apple 的官方 ...
- 直接取HANA数据库数据,动态QUERY
"COPY别人的TYPE-POOLS:ADBC. DATA LV_SQL TYPE STRING. DATA LV_FROM TYPE STRING. DATA LV_WHERE TYPE ...
- Python中T-SNE实现降维
Python中T-SNE实现降维 from sklearn.manifold import TSNE from sklearn.datasets import load_iris from sklea ...
- async 和 await 以及Action Func
C# 5.0中引入了async 和 await.这两个关键字可以让你更方便的写出异步代码. 看个例子: public class MyClass { public MyClass() { Displa ...
- android 定制目录
首先简单介绍一下安卓系统文件夹对照表 主要介绍的是Android系统的文件夹结构,帮助大家更直观地了解系统 \\system\\app这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结 ...
- linux web php 安全相关设置
1 隐藏apache 或者 nginx的版本号 2 隐藏php的版本号 3 php 程序做好基本的防注入 xss之类的攻击 4 禁用PHP一些危险的函数 比如 phpinfo.system之类的 5 ...
- web开发-前端到服务器Controller中的数据传递
一, ajax方式 1. ajax获取页面中的数据,包括表单中的数据, 然后封装成对象,数组, 字符串, 或其他基本类型的数据. 2. 将封装得到的数据通过ajax传递到controller中(注:在 ...
- Prime Palindromes
题目大意:求出区间[a,b]之间的回文质数. a<=b<=10^8; 解题过程: 1.先打个素数表,新学了个 欧拉筛法,是对普通筛法的改进.普通筛法是每找到一个素数,就把它的所有倍数标记成 ...
- comboBox的id返回System.Data.DataRowView
关系到ComboBox的DataSource,DisplayMember和ValueMember属性的设置顺序的问题. ComboBox的DataSource属性为object类型,但是需要实现ILi ...