常用函数及宏定义
二级必过法宝之chap6函数与宏定义
return result;
} 返回运算结果*/
第14页
表示不返回结果
2.不返回运算结 果的函数定义
void 函数名(参数表) /* 函数首部 */ { /* 函数体 */ 函数实现过程 return; /* 可以省略return */ }
这类函数通常用于屏幕输出等 不能省略 否则 函数类型被默认定义为int
20:18
第4页
程序结构
main( )
函数1
函数2
… …
函数m
函数 1_1
函数 1_2
函数 m_1
… …
函数 m_n
20:18
第5页
• main()也是一个函数,C程序由一个main() 或多个函数构成。 • 程序中一旦调用了某个函数,该函数就会 完成一些特定的工作,然后返回到调用它 的地方。
1、函数经过运算,得到一个明确的运算结果, 并需要回送该结果。例如,函数add()返回两个 数的和。 2、函数完成一系列操作步骤,不需要回送任何 运算结果。
20:18
第10页
函数定义1: int abs_sum(int m, int n) { if (m<0) m=-m; if(n<0) n=-n; return(m+n); }
20:18
函数定义2: int abs_sum(m, n) int m,n { if (m<0) m=-m; if(n<0) n=-n; return(m+n); }
20:18
第23页
4.函数原型声明
只写函数定义中的第1行(函数首部),并以分号结束。
函数类型 函数名(参数表);
double cylinder (double r, double h); void pyramid (int n);
c 函数宏定义格式
c 函数宏定义格式(原创实用版)目录1.函数宏定义的概念2.函数宏定义的格式3.函数宏定义的实例4.函数宏定义的注意事项正文1.函数宏定义的概念在 C 语言编程中,宏定义是一种将符号或表达式替换为程序中指定的字符串的机制。
通过宏定义,我们可以简化程序的编写,提高代码的可读性和可维护性。
函数宏定义就是将一个函数名及其参数和返回值类型等信息进行宏定义,以便在程序中调用。
2.函数宏定义的格式函数宏定义的格式为:`#define 函数名 (参数类型参数名) 函数体`其中:- `函数名`:宏定义的函数名,需要符合 C 语言的命名规则。
- `参数类型参数名`:函数的参数,参数类型和参数名之间用空格隔开,多个参数用逗号分隔。
- `函数体`:函数的实现,可以是一行或多行代码。
3.函数宏定义的实例下面是一个函数宏定义的实例:```c#define MAX(a, b) ((a) > (b)? (a) : (b))```这个宏定义定义了一个名为`MAX`的函数,它接受两个参数`a`和`b`,都是整数类型。
函数体是一个三目运算符,用于比较`a`和`b`的大小,并返回较大的值。
4.函数宏定义的注意事项在使用函数宏定义时,需要注意以下几点:- 函数宏定义不会为函数分配内存,它只是在编译时将宏定义替换到程序中。
- 函数宏定义没有返回值,其实现部分只是一个表达式,不会返回一个值。
- 函数宏定义的参数是固定的,不能在程序中动态传入参数。
- 函数宏定义的函数名和参数类型必须符合 C 语言的命名规则。
通过使用函数宏定义,我们可以简化程序的编写,提高代码的可读性和可维护性。
第1页共1页。
第5章 函数与带参数宏 《C语言程序设计及应用教程》课件-PPT课件
5.2 函数的嵌套与递归调用
函数的嵌套调用
不允许嵌套定义,函数间平行的、独立。 C中的函数:
允许嵌套调用。
main( ) 调用函数a 结束
a函数
调用函数b
b函数
【例5-7】 输入两个整数,求平方和
#include <stdio.h>
int fun1(int x,int y)
int fun1(int x,int y);
斐波那契数列");
for(i=0;i<N;i++)
{
printf("%d\t",iF[i]);
if((i+1)%10==0)
printf("\n");
}
printf("\n");
}
int Sum(int iF[],int n); void main() { int i,Fibonacci[N],m,n; //生成斐波那契数列 CreateFibonacci(Fibonacci); //输出斐波那契数列 PrintFibonacci(Fibonacci); //求数列前n项的和 printf(" 请输入要求和的项数 n(n<%d): ",N); scanf("%d",&n); m=Sum(Fibonacci,n); printf("\n 斐波那契数列前 %d项的和:%4d\n",n,m);}
第5章 函数与带参数宏 ?C语言 程序设计及应用教程?课件
5.1 函数的声明、定义与调用
5.1.1 函数的声明与定义 5.1.2 函数调用 5.1.3 函数参数传递 5.1.4 主函数中的参数
c语言常用函数大全及详解
c语言常用函数大全及详解C语言是一种通用的、面向过程的编程语言,被广泛应用于系统软件、嵌入式开发以及科学计算领域。
在C语言中,函数是一种模块化编程的基本方法,通过函数可以将一段代码进行封装和复用,提高了代码的可读性和可维护性。
本文将介绍一些C语言中常用的函数,并详细解释其用法及重要参数。
一、数学函数1. abs()函数函数原型:int abs(int x);函数功能:返回x的绝对值。
参数说明:x为一个整数。
2. pow()函数函数原型:double pow(double x, double y);函数功能:计算x的y次方。
参数说明:x和y为两个double类型的实数。
3. sqrt()函数函数原型:double sqrt(double x);函数功能:计算x的平方根。
参数说明:x为一个double类型的实数。
二、字符串函数1. strcpy()函数函数原型:char* strcpy(char* destination, const char* source);函数功能:将source字符串复制到destination字符串。
参数说明:destination为目标字符串,source为源字符串。
2. strlen()函数函数原型:size_t strlen(const char* str);函数功能:计算str字符串的长度。
参数说明:str为一个以'\0'结尾的字符串。
3. strcat()函数函数原型:char* strcat(char* destination, const char* source);函数功能:将source字符串拼接到destination字符串的末尾。
参数说明:destination为目标字符串,source为源字符串。
三、文件操作函数1. fopen()函数函数原型:FILE* fopen(const char* filename, const char* mode);函数功能:打开一个文件,并返回文件指针。
define宏定义函数
define宏定义函数宏定义是C/C++语言中一种预处理指令,可以用来对代码中的固定值或者复杂表达式进行替换,减少代码编写时的重复性问题,提高代码重用性和可读性。
宏定义的语法格式为:#define 宏名称宏替换文本其中,宏名称是自定义的标识符,宏替换文本可以是单个字符、数值、表达式、函数调用等。
宏定义的有效范围是从定义处到文件末尾或者遇到#undef指令为止。
宏定义的优点在于,它可以让程序员在代码中使用一个短小的名称来代替一个复杂的表达式或者语句,从而提高代码可读性和可维护性。
同时,在编译时,编译器会将所有使用到宏定义的代码中的宏名称展开成对应的宏替换文本,从而使得程序的运行效率得到提高。
宏定义的应用场景非常广泛,例如:1.定义常量:可以使用#define宏定义,将一个固定的值定义为一个常量,方便在代码中多次使用。
例如:#define PI 3.14这样在后续的代码中就可以使用PI来代替3.14,提高可读性和可维护性。
2.定义函数:宏定义可以定义一些简单的函数。
例如:#define max(a,b) ((a)>(b)?(a):(b))这个宏定义表示求取两个数中的最大值,在后续的代码中可以用max(a,b)来代替((a)>(b)?(a):(b)),达到简洁、明了的效果。
3.定义缩写:在代码中,有时需要使用一些比较长的名称来表示一些事物,为了方便使用,可以用宏定义来缩写这些名称,在代码中使用时可以提高可读性和代码规范性。
例如:#define HTTP_STATUS_OK 200#define HTTP_STATUS_BAD_REQUEST 4004.条件编译:宏定义可以用于条件编译,在程序中加入一些特别的代码,根据不同的编译选项选择编译或者不编译这些代码。
例如:#ifdef DEBUGprintf("error message: %s\n", error_msg);#endif如果在编译程序的时候加上了-DDEBUG选项,则会将上述代码编译到程序中,否则会被忽略。
Excel中的函数和宏的高级使用技巧
Excel中的函数和宏的高级使用技巧第一章:函数的高级使用技巧Excel中的函数是处理和分析数据的重要工具,在日常工作中有着广泛的应用。
这一章将介绍一些函数的高级使用技巧。
1.1 动态函数Excel中的函数通常是根据特定的数据范围进行计算的,但有时候我们希望函数的计算能够根据数据的变化而动态调整。
这时可以使用动态函数。
动态函数可以通过使用相对引用(如A1)或结构化引用(如表格名称[列名])来实现。
这样,当数据范围发生变化时,函数会自动调整计算公式。
例如,如果我们要计算一个数据表格的每行总和,可以使用SUM函数结合结构化引用。
这样,当数据表格的行数改变时,函数会自动调整计算范围。
1.2 数组函数Excel中的数组函数可以处理多个数值,通常返回一个数组结果。
数组函数在处理大量数据时非常有用。
常见的数组函数有SUM、AVERAGE、MAX和MIN。
这些函数可以同时处理多个范围或单元格,并返回一个数组结果。
例如,我们可以使用SUM函数来计算一个数据范围的总和,并将结果显示在一个单元格中。
如果要计算多个范围的总和,可以使用数组函数SUM,并将计算结果显示在多个单元格中。
第二章:宏的高级使用技巧宏是Excel中自动化操作的一种方式,可以帮助我们快速完成复杂的任务。
这一章将介绍一些宏的高级使用技巧。
2.1 宏的录制与编辑Excel提供了“录制宏”的功能,可以记录我们在工作表上的操作,然后将其转化为一个宏代码。
录制宏后,我们可以对录制的宏进行编辑,以满足特定的需求。
编辑宏可以改变宏的逻辑、添加判断条件、修改输出结果等。
2.2 宏的自定义按钮为了方便使用宏,我们可以将宏与一个自定义按钮相关联。
这样,每次点击按钮时,宏代码就会被执行。
在Excel中,我们可以通过向工具栏添加一个自定义按钮,并将宏与该按钮相关联。
这样,我们只需要点击按钮就可以使用宏了。
2.3 宏的错误处理宏执行过程中可能会发生错误,为了避免宏的错误导致Excel崩溃,我们需要为宏添加错误处理的功能。
C语言_函数与宏定义_教案
C语言_函数与宏定义_教案教案:C语言_函数与宏定义一、教学目标:1.理解函数的概念和作用;2.学会如何定义和调用函数;3.掌握宏定义的概念和使用方法;4.能够编写复杂的函数和宏定义;5.了解函数和宏定义在编程中的应用。
二、教学内容:1.函数的概念和作用;2.函数的定义和调用;3.函数的参数传递和返回值;4.宏定义的概念和使用方法;5.常用的函数和宏定义的案例。
三、教学步骤:1.导入知识(10分钟)引导学生回顾函数和宏定义的概念,了解它们在编程中的作用和优势。
2.函数的定义和调用(20分钟)-介绍函数的定义和调用的语法;-示例代码演示函数的定义和调用的过程;-学生练习编写简单的函数,并进行调用。
3.函数的参数传递和返回值(20分钟)-介绍函数的参数传递和返回值的概念;-示例代码演示函数的参数传递和返回值的过程;-学生练习编写带参数和返回值的函数。
4.宏定义的概念和使用方法(20分钟)-介绍宏定义的概念和使用方法;-示例代码演示宏定义的过程;-学生练习编写简单的宏定义。
5.常用的函数和宏定义的案例(30分钟)-分析并演示常用的函数和宏定义的应用场景;-以实际案例为例,讲解函数和宏定义在编程中的应用;-学生根据案例练习编写函数和宏定义。
6.总结及作业布置(10分钟)-总结本节课学到的知识点和技能;-布置作业:要求学生编写一个复杂的函数或宏定义,并在下节课进行演示与交流。
四、教学资源:1.讲义和课件;2.代码示例;3. 编程工具(例如Code::Blocks)。
五、教学评估:1.班级练习作业评估;2.随堂讨论、提问和回答问题;3.下节课学生的演示与交流评估。
六、教学反思:通过本节课的教学,学生应该能够理解函数和宏定义的概念,掌握函数的定义和调用的方法,以及函数的参数传递和返回值的使用。
同时,学生还应该了解宏定义的使用方法,并能够编写复杂的函数和宏定义。
为了加深学生的理解和应用能力,本节课引入了常用的函数和宏定义的案例,以实际问题为例,讲解函数和宏定义在编程中的应用。
c语言中宏定义
c语言中宏定义宏定义是C语言中一种非常重要的特性,通过宏定义可以简化代码,提高代码的可维护性和可读性。
在C语言中,宏定义是通过#define指令来实现的,可以定义常量、函数宏以及条件编译等。
首先,我们来看一下如何定义常量宏。
在C语言中,我们可以使用#define指令定义常量,例如:#define PI 3.14159。
这样,每次在代码中使用PI时,编译器会将其替换为3.14159。
常量宏的定义格式为#define 宏名值。
除了定义常量,宏定义还可以用来定义函数宏。
函数宏是一种宏定义,可以像函数一样接受参数,并返回一个值。
例如,我们可以定义一个计算平方的函数宏:#define SQUARE(x) ((x) * (x))。
在使用时,可以像函数一样传入参数,编译器会将其替换为对应的表达式。
另外,宏定义还可以用于条件编译,即根据条件编译指令来决定编译哪些代码。
例如,我们可以使用宏定义来控制代码的编译,如下所示:#ifdef DEBUGprintf("Debug mode\n");#endif在这段代码中,如果定义了DEBUG宏,则会打印“Debug mode”,否则不会打印。
条件编译可以根据宏定义的真假来选择性地编译代码,提高代码的灵活性和可移植性。
此外,宏定义还可以用于定义一些特定的编译器指令,如调试信息、优化等。
通过宏定义,我们可以根据不同的编译选项定义不同的宏,以达到不同的编译效果。
总的来说,宏定义是C语言中一种非常有用的特性,可以简化代码、提高代码的可维护性和可读性,同时还可以用于条件编译、函数宏等方面。
合理地使用宏定义,可以使代码更加灵活、高效。
希望以上内容对您有所帮助。
如果有其他问题,欢迎继续提问。
感谢阅读!。
常用数学常量宏定义
常用数学常量宏定义
常用数学常量宏定义主要用于编程和计算过程中,便于进行数值表示和符号运算。
以下是几种常用的数学常量宏定义:
1. π(圆周率):表示圆的周长与其直径的比值,约等于。
在C语言中,可以使用宏定义表示为:
```c
define PI
```
2. e(自然对数的底数):约等于。
在C语言中,可以使用宏定义表示为:
```c
define E
```
3. φ(黄金分割比):表示一段长度为其全长的倍的点。
在C语言中,可以使用宏定义表示为:
```c
define GOLDEN_RATIO (1 + sqrt(5)) / 2
```
4. 无穷大:表示一个无限大的数。
在C语言中,可以使用宏定义表示为:
```c
define INFINITY ( / )
```
5. NaN(非数字):表示一个非数字的特殊值。
在C语言中,可以使用宏定义表示为:
```c
define NAN ( / )
```
这些宏定义可以在程序中使用,方便进行数值计算和符号运算。
需要注意的是,不同的编程语言和环境可能会有不同的宏定义方式和语法要求,需要根据具体的语言和环境进行相应的定义和使用。
Excel宏命令与自定义函数开发
Excel宏命令与自定义函数开发第一章:Excel宏命令简介Excel宏命令是Excel软件中一种自动化工具,其可以录制用户在Excel中所进行的操作,并将其转化为一段可以再次执行的代码。
通过Excel宏命令的应用,用户可以快速地完成重复性任务,提高工作效率。
本章将介绍Excel宏命令的基本概念、录制方法以及常用的宏命令操作。
1.1 Excel宏命令的概念宏命令是一段由VBA(Visual Basic for Applications)编写的代码,通过录制操作实现自动化执行。
宏命令可以包含一系列Excel操作,如插入数据、格式设置、计算公式等。
通过宏命令,用户可以一次性执行复杂的操作,节省了大量的时间和精力。
1.2 Excel宏命令的录制方法在Excel中,用户可以通过便捷的录制方法来创建宏命令。
首先,点击“开发工具”选项卡,在“宏”组中选择“录制宏”。
然后,用户可以进行一系列操作,Excel将自动记录这些操作的相关代码。
最后,用户可以停止录制,并将录制的宏命令保存下来,以备后续使用。
1.3 常用的宏命令操作Excel宏命令可以执行各种各样的操作,以下是一些常见的宏命令操作:- 插入数据:在录制宏命令过程中,用户可以将输入的数据进行记录,以便后续通过宏命令批量插入数据。
- 格式设置:宏命令可以自动进行单元格格式的设置,例如文字加粗、颜色填充、边框样式等。
- 计算公式:通过宏命令,用户可以录制复杂的计算公式,避免了手动输入的繁琐操作。
- 图表生成:宏命令可以录制图表生成的过程,用户可以一次性生成多个图表,提高数据可视化的效果。
第二章:Excel自定义函数开发除了宏命令外,Excel还提供了自定义函数开发的功能。
用户可以通过编写VBA代码来创建自定义函数,以实现特定的功能。
本章将介绍Excel自定义函数的基本概念、开发方法以及常见的应用场景。
2.1 自定义函数的概念自定义函数是由用户编写的VBA代码,可以嵌入到Excel中作为一种自定义的函数。
C语言—函数与宏定义
4)函数分为有参与无参函数
5)程序从main开始执行,最后又回到main函 数结束。
库函数简介
系统自带的标准库函数根据不同的功能作用放在
不同的头文件中。
stdio.h 用于标准输入/输出
math.h 用于数学计算
ctype.h 用于字符处理
string.h 用于字串处理
time.h 用于时间/日期的处理
main ( ) {int a, b, c; a=printstar( ); b=print_message( ); c=printstar( ); printf("a=%d, b=%d, c=%d\n", a, b, c); } }
则运行结果为:
************ How do you do!
a1( ) {
… }
{
}
… a( )
b( ) {
…
…
b1( )
b1( ) {
… }
b( )
…
…
b2( )
…
c( )
}
b2( ) {
… }
… }
c( ) {
… c1( ) … }
c1( ) {
… }
在C语言中,函数的含义不是数学中的函数关 系,而是一个处理。它可以进行数值运算、信息处 理、控制决策,即把一段程序的工作放在函数中进 行。
• 在被定义的函数中,必须指定形参的 类型,可在形参说明部分说明,也可 在形参表列中说明。如
如:int max(int x, int y) { }
二、函数返回值语句
通过函数调用使用函数能得到一个确定的 值,这就是函数的返回值。
1、函数无返回值的情况
return;
c语言中常用的宏定义
c语言中常用的宏定义C语言中常用的宏定义在C语言中,宏定义是一种预处理指令,用于在编译前将代码中的标识符替换为指定的文本。
宏定义可以提高代码的可读性和可维护性,减少代码的重复性,提高开发效率。
下面将介绍一些常用的宏定义。
1. #define#define是C语言中最常用的宏定义指令之一,用于定义一个宏。
它的基本语法为:#define 宏名替换文本宏名可以是任意合法的标识符,替换文本可以是任意合法的C代码。
当程序中出现宏名时,预处理器会将其替换为相应的文本。
2. #ifdef / #ifndef / #endif这三个宏定义指令用于条件编译。
#ifdef用于检查一个宏是否已经定义,#ifndef则用于检查一个宏是否未定义。
如果条件成立,接下来的代码将被编译,否则将被忽略。
#endif用于结束条件编译指令的范围。
3. #if / #elif / #else这些宏定义指令也用于条件编译。
#if用于判断一个常量表达式的值是否为真,如果为真,则接下来的代码将被编译。
#elif用于在多个条件中选择一个进行编译,如果前面的条件不成立,则判断下一个条件。
#else用于指定当前面的条件都不成立时要编译的代码。
4. #undef#undef用于取消一个已定义的宏。
当不再需要某个宏时,可以使用#undef将其取消定义。
5. #include#include是C语言中用于包含头文件的宏定义指令。
头文件中通常包含了一些函数的声明、宏定义和结构体的定义等。
使用#include 可以将头文件的内容插入到当前文件中。
6. #pragma#pragma是一种特殊的宏定义指令,它用于控制编译器的行为。
不同的编译器支持的#pragma指令有所不同,常用的#pragma指令有#pragma once(用于防止头文件的重复包含)、#pragma warning(用于控制编译器的警告信息)等。
7. #line#line用于修改编译器产生的行号和文件名。
C语言中的宏定义
C语言中的宏定义1. 简单宏定义简单的宏定义有如下格式:[#define指令(简单的宏)] #define 标识符替换列表替换列表是一系列的C语言记号,包括标识符、关键字、数、字符常量、字符串字面量、运算符和标点符号。
当预处理器遇到一个宏定义时,会做一个“标识符”代表“替换列表”的记录。
在文件后面的内容中,不管标识符在任何位置出现,预处理器都会用替换列表代替它。
不要在宏定义中放置任何额外的符号,否则它们会被作为替换列表的一部分。
一种常见的错误是在宏定义中使用 = :1.#define N = 100 /*** WRONG ***/2.int a[N]; /* 会成为 int a[= 100]; */在上面的例子中,我们(错误地)把N定义成一对记号(= 和100)。
在宏定义的末尾使用分号结尾是另一个常见错误:1.#define N 100; /*** WRONG ***/2.int a[N]; /* become int a[100;]; */这里N被定义为100和;两个记号。
在一个宏定义中,编译器可以检测到绝大多数由多余符号所导致的错误。
但不幸的是,编译器会将每一处使用这个宏的地方标为错误,而不会直接找到错误的根源——宏定义本身,因为宏定义已经被预处理器删除了。
简单的宏主要用来定义那些被Kernighan和Ritchie称为“明示常量”(manifest constant)的东西。
使用宏,我们可以给数值、字符和字符串命名。
1.#define STE_LEN 802.3.#defineTRUE 14.5.#defineFALSE 06.7.#definePI 3.141598.9.#defineCR '\r'10.11.#defineEOS '\0'使用#define来为常量命名有许多显著的优点:1) 、程序会更易读。
一个认真选择的名字可以帮助读者理解常量的意义。
否则,程序将包含大量的“魔法数”,使读者难以理解。
OC常用的宏定义
OC常⽤的宏定义#ifndef LPHDefines_h#define LPHDefines_h/* Log */#pragma mark - Log#ifdef DEBUG# define LPHLog(fmt, ...) NSLog((@"[⽂件名:%s]\n" "[函数名:%s]\n" "[⾏号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);#else# define LPHLog(...);#endif/* Device Infos */#pragma mark - Device Infos/* App 版本 */#define AppVersion [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]/* 当前系统版本 */#define SystemVersion [[[UIDevice currentDevice] systemVersion] floatValue]/* 是否iPad */#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)/* 是否iPhone */#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)/* 是否iPhone X */#define IS_IPHONE_X ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)/* 屏幕尺⼨ */#define SCREEN_SIZE [[UIScreen mainScreen] bounds].size#define SAFEAREAINSETS ({UIEdgeInsets i; if (@available(iOS 11.0, *)) {if (IS_IPHONE_X) { i = UIEdgeInsetsMake(22, 22, 21, 22); } else { i = UIEdgeInsetsZero; }} else { i = UIEdgeInsetsZero; } i;}) #pragma mark - Sandbox#define SandboxDirectory(type) NSSearchPathForDirectoriesInDomains(type, NSUserDomainMask, YES).firstObject#define LPHDocumentDirectory SandboxDirectory(NSDocumentDirectory) /* 沙盒地址,Document */#define LPHCacheDirectory SandboxDirectory(NSCachesDirectory) /* 沙盒地址,Cache */#define LPHLibraryDirectory SandboxDirectory(NSLibraryDirectory) /* 沙盒地址,Library */#pragma mark - UI To iOS Value/**UI效果图的数值,转成当前APP中UI的数值*/#define LPHUIScale (IS_IPHONE ? SCREEN_SIZE.width / 360.0f : SCREEN_SIZE.width / 720.0f)#define LPHUIToValueNoScale(phone,pad) (IS_IPHONE ? (phone / 3.0f) : (pad / 2.0f))#define LPHUIToValue(phone,pad) (LPHUIToValueNoScale(phone,pad) * LPHUIScale)#define LPH_SystemFont(phone,pad) [UIFont systemFontOfSize:LPHUIToValue(phone,pad)];#pragma mark - NSNotificationCenter && NSUserDefaults Quick Getter#define LPHNotificationCenter [NSNotificationCenter defaultCenter]#define LPHUserDefaults [NSUserDefaults standardUserDefaults]#pragma mark - Color#define LPH_RGBAColor(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:a]#define LPH_RGBColor(r, g, b) LPH_RGBAColor(r, g, b, 1.0f)#define LPH_HexRGBAColor(c, a) [UIColor colorWithRed: \((float)((c & 0xFF0000) >> 16)) / 255.0 \green: ((float)((c & 0xFF00) >> 8)) / 255.0 \blue: ((float)(c & 0xFF)) / 255.0 \alpha: a]#define LPH_HexRGBColor(c) LPH_HexRGBAColor(c,1.0f)/**定义单例*/#pragma mark Singleton#define LPHHSingleton + (instancetype)sharedInstance; //.h⽂件中的定义#define LPHMSingleton /* .m⽂件中的定义 */ \static id shareInstance = nil;\+ (instancetype)sharedInstance {\static dispatch_once_t onceToken;\dispatch_once(&onceToken, ^{\shareInstance = [[self alloc] init];\});\\return shareInstance;\}\\+ (instancetype)allocWithZone:(struct _NSZone *)zone {\\static dispatch_once_t onceToken;\dispatch_once(&onceToken, ^{\shareInstance = [super allocWithZone:zone];\});\\return shareInstance;\}\\- (id)copyWithZone:(NSZone *)zone{\return shareInstance;\}#endif /* LPHDefines_h */~~~~~~~~~//通⽤宏定义#ifndef define_h#define define_h//获取系统对象#define kApplication[UIApplication sharedApplication]#define kAppWindow[UIApplication sharedApplication].delegate.window#define kAppDelegate[AppDelegate shareAppDelegate]#define kRootViewController[UIApplication sharedApplication].delegate.window.rootViewController #define kUserDefaults[NSUserDefaults standardUserDefaults]#define kNotificationCenter[NSNotificationCenter defaultCenter]//获取屏幕宽⾼#define KScreenWidth([[UIScreen mainScreen]bounds].size.width)#define KScreenHeight[[UIScreen mainScreen]bounds].size.height#define kScreen_Bounds[UIScreen mainScreen].bounds#define Iphone6ScaleWidth KScreenWidth/375.0#define Iphone6ScaleHeight KScreenHeight/667.0//根据ip6的屏幕来拉伸#define kRealValue(with)((with)*(KScreenWidth/375.0f))//强弱引⽤#define kWeakSelf(type)__weak typeof(type)weak##type = type;#define kStrongSelf(type)__strong typeof(type)type = weak##type;//View圆⾓和加边框#define ViewBorderRadius(View,Radius,Width,Color)\\[yer setCornerRadius:(Radius)];\[yer setMasksToBounds:YES];\[yer setBorderWidth:(Width)];\[yer setBorderColor:[Color CGColor]]// View圆⾓#define ViewRadius(View,Radius)\\[yer setCornerRadius:(Radius)];\[yer setMasksToBounds:YES]//property属性快速声明#define PropertyString(s)@property(nonatomic,copy)NSString * s#define PropertyNSInteger(s)@property(nonatomic,assign)NSIntegers#define PropertyFloat(s)@property(nonatomic,assign)floats#define PropertyLongLong(s)@property(nonatomic,assign)long long s#define PropertyNSDictionary(s)@property(nonatomic,strong)NSDictionary * s#define PropertyNSArray(s)@property(nonatomic,strong)NSArray * s#define PropertyNSMutableArray(s)@property(nonatomic,strong)NSMutableArray * s///IOS版本判断#define IOSAVAILABLEVERSION(version)([[UIDevice currentDevice]availableVersion:version]< 0) //当前系统版本#define CurrentSystemVersion[[UIDevice currentDevice].systemVersion doubleValue]//当前语⾔#define CurrentLanguage([NSLocale preferredLanguages]objectAtIndex:0])//-------------------打印⽇志-------------------------//DEBUG模式下打印⽇志,当前⾏#ifdef DEBUG#define DLog(fmt,...)NSLog((@"%s[Line %d]" fmt),__PRETTY_FUNCTION__,__LINE__,##__VA_ARGS__);#else#define DLog(...)#endif//拼接字符串#define NSStringFormat(format,...)[NSString stringWithFormat:format,##__VA_ARGS__]//颜⾊#define KClearColor[UIColor clearColor]#define KWhiteColor[UIColor whiteColor]#define KBlackColor[UIColor blackColor]#define KGrayColor[UIColor grayColor]#define KGray2Color[UIColor lightGrayColor]#define KBlueColor[UIColor blueColor]#define KRedColor[UIColor redColor]#define kRandomColorKRGBColor(arc4random_uniform(256)/255.0,arc4random_uniform(256)/255.0,arc4random_uniform(256)/255.0)//随机⾊⽣成//字体#define BOLDSYSTEMFONT(FONTSIZE)[UIFont boldSystemFontOfSize:FONTSIZE]#define SYSTEMFONT(FONTSIZE)[UIFont systemFontOfSize:FONTSIZE]#define FONT(NAME,FONTSIZE)[UIFont fontWithName:(NAME)size:(FONTSIZE)]//定义UIImage对象#define ImageWithFile(_pointer)[UIImage imageWithContentsOfFile:([[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"%@@%dx",_pointer,(int)[UIScreen mainScreen].nativeScale]ofType:@"png"])]#define IMAGE_NAMED(name)[UIImage imageNamed:name]//数据验证#define StrValid(f)(f!=nil &&[f isKindOfClass:[NSString class]]&& ![f isEqualToString:@""])#define SafeStr(f)(StrValid(f)?f:@"")#define HasString(str,eky)([str rangeOfString:key].location!=NSNotFound)#define ValidStr(f)StrValid(f)#define ValidDict(f)(f!=nil &&[f isKindOfClass:[NSDictionary class]])#define ValidArray(f)(f!=nil &&[f isKindOfClass:[NSArray class]]&&[f count]>0)#define ValidNum(f)(f!=nil &&[f isKindOfClass:[NSNumber class]])#define ValidClass(f,cls)(f!=nil &&[f isKindOfClass:[cls class]])#define ValidData(f)(f!=nil &&[f isKindOfClass:[NSData class]])//获取⼀段时间间隔#define kStartTime CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();#define kEndTimeNSLog(@"Time: %f",CFAbsoluteTimeGetCurrent()- start)//打印当前⽅法名#define ITTDPRINTMETHODNAME()ITTDPRINT(@"%s",__PRETTY_FUNCTION__)//GCD#define kDISPATCH_ASYNC_BLOCK(block)dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),block) #define kDISPATCH_MAIN_BLOCK(block)dispatch_async(dispatch_get_main_queue(),block)//GCD -⼀次性执⾏#define kDISPATCH_ONCE_BLOCK(onceBlock)static dispatch_once_t onceToken;dispatch_once(&onceToken,onceBlock);//GCD#define CallForMainQueue(__function__)\if([NSThread isMainThread]){\__function__;\}\else\{\dispatch_sync(dispatch_get_main_queue(),^{\__function__;\});\}\#define CallForAsyncQueue(__function__)(\dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{\__function__;\})\)#define kPathTemp NSTemporaryDirectory()#definekPathDocument [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] #definekPathCache [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]//单例化⼀个类#define SINGLETON_FOR_HEADER(className)\\+(className *)shared##className;#define SINGLETON_FOR_CLASS(className)\\+(className *)shared##className { \static className *shared##className = nil;\static dispatch_once_t onceToken;\ dispatch_once(&onceToken,^{ \ shared##className =[[self alloc]init];\ });\return shared##className;\}#endif /* define_h */。
stm32 时钟频率函数
STM32 的时钟频率可以通过不同的函数进行配置和控制。
以下是一些常用的函数和宏定义,用于配置和获取STM32 的时钟频率:1. `void SystemClock_Config(void);`这个函数用于配置系统时钟频率。
它可以根据不同的参数设置HSI、HSE、PLL 等,以获得所需的系统时钟频率。
2. `void SystemCoreClockUpdate(void);`这个函数用于更新系统核心时钟频率。
它通过调用`SystemClock_Config()` 函数重新配置系统时钟,以确保系统核心时钟频率的正确性。
3. `uint32_t SystemCoreClock;`这个全局变量存储当前的系统核心时钟频率。
通过调用`SystemCoreClockUpdate()` 函数可以更新该变量的值。
4. `#define HSI_V ALUE (8000000UL)`这个宏定义用于设置HSI(High Speed Internal)的频率值。
可以根据需要进行调整。
5. `#define HSE_V ALUE (8000000UL)`这个宏定义用于设置HSE(High Speed External)的频率值。
可以根据需要进行调整。
6. `#define PLL_M (8)`这个宏定义用于设置PLL(Phase-Locked Loop)的分频因子。
可以根据需要进行调整。
7. `#define PLL_N (336)`这个宏定义用于设置PLL 的倍频因子。
可以根据需要进行调整。
8. `#define PLL_P (2)`这个宏定义用于设置PLL 的分频因子。
可以根据需要进行调整。
9. `#define PLL_Q (7)`这个宏定义用于设置PLL 的分频因子。
可以根据需要进行调整。
使用这些函数和宏定义,您可以方便地配置和控制STM32 的时钟频率,以满足您的应用需求。
宏定义(无参宏定义和带参宏定义),C语言宏定义详解
宏定义(⽆参宏定义和带参宏定义),C 语⾔宏定义详解1、宏定义说明宏定义是⽐较常⽤的预处理指令,即使⽤“标识符”来表⽰“替换列表”中的内容。
标识符称为宏名,在预处理过程中,预处理器会把源程序中所有宏名,替换成宏定义中替换列表中的内容。
常见的宏定义有两种,不带参数的宏定义和带参数的宏定义。
2、⽆参宏定义⽆参数宏定义的格式为:#define 标识符替换列表替换列表可以是数值常量、字符常量、字符串常量等,故可以把宏定义理解为使⽤标识符表⽰⼀常量,或称符号常量。
说明:1. 可以不在⾏⾸,但只允许它前⾯有空格符。
例如:#define PI 3.1416 //正确,该⾏#前允许有空格int a;#define N 5 //错误,该⾏#前不允许有空格外的其他字符2. 标识符和替换列表之间不能加赋值号 =,替换列表后不能加分号#define N =5 //虽语法正确,但预处理器会把N替换成=5int a[N]; //错误,因为宏替换之后为 int a[=5];宏定义不是语句,是预处理指令,故结尾不加分号。
如果不⼩⼼添加了分号,虽然有时该宏定义没问题,但在宏替换时,可能导致 C 语法错误,或得不到预期结果。
例如:#define N 5; //虽语法正确,但会把N替换成5;int a[N]; //语法错误,宏替换后,为int a[5;];错误3. 由于宏定义仅是做简单的⽂本替换,故替换列表中如有表达式,必须把该表达式⽤括号括起来,否则可能会出现逻辑上的“错误”。
例如:#define N 3+2int r = N * N;宏替换后为:int r=3+2*3+2; //r=11如果采⽤如下形式的宏定义:#define N (3+2)int r=N*N;则宏替换后,为:int r=(3+2)*(3+2); //r=254. 当替换列表⼀⾏写不下时,可以使⽤反斜线\作为续⾏符延续到下⼀⾏。
例如:#define USA "The United \States of \America"该宏定义中替换列表为字符串常量,如果该串较长,或为了使替换列表的结构更清晰,可使⽤续⾏符 \ 把该串分若⼲⾏来写,除最后⼀⾏外,每⾏⾏尾都必须加续⾏符 \。
C语言函数和宏定义资料
函数和宏定义一.目的和要求1、掌握函数的定义方法和调用规则。
2、掌握C语言程序中主调函数和被调用函数之间进行数据传递的规则。
3、了解函数的返回值及它的类型,并正确使用它。
4、了解局部变量和全局变量的作用域及它们与存储分类的关系,理解变量的存在性和可见性的概念。
5、练习递归函数的使用。
6、理解宏的概念,掌握定义无参宏和带参宏的方法。
了解文件包含的概念,掌握其用法。
7、理解内部函数和外部函数,了解外部函数的编译和连接的方法。
二.相关知识1、函数的概念函数是一个可以反复使用的程序段,从其它的程序段中均可以通过调用语句来执行这段程序,完成既定的工作。
从程序设计的角度来看,函数可以分为两种:①标准函数,即库函数。
②自定义函数。
从函数形式的角度来看,函数也可分为无参函数和有参函数两种。
2、函数的定义一个函数在被调用之前必须先定义,函数定义的一般形式:存储类型数据类型函数名(形式参数表){ 数据定义语句序列;执行语句序列;}3、函数的调用函数调用按函数是否有返回值分为有返回值的函数调用和无返回值的函数调用。
其格式如下:函数名(实参表)[;]无返回值的函数调用格式,最后要有一个语句结束符“分号”。
4、函数的声明函数声明是指在主调函数中,对在本函数中将要被调用的函数提前作的必要的声明。
函数声明的一般格式为:存储类型数据类型函数名(形式参数表);注意:①当函数定义在前,主调函数的定义在后时,可以缺省函数声明。
②如果被调的用户函数和主调函数不在同一编译单位,则在定义函数的编译单位应将该函数定义成extern,在主调函数的函数体中将该函数说明为extern。
5、函数调用中的数据传递方法C语言规定在函数间传递数据有四种方式:值传递方式、地址传递方式、返回值方式、全局变量传递方式。
①值传递方式所传递的是参数值,其特点是“参数值的单向传递”。
②地址传递方式所传递的是地址,其特点是“参数值的双向传递”。
③返回值方式不是在形式参数和实际参数之间传递数据,而是通过函数调用后直接返回一个值到主调函数中。
c语言宏定义的语法要求
c语言宏定义的语法要求在C语言中,宏定义是使用`#define`关键字进行的。
宏定义用于在程序中创建符号常量、函数宏和条件编译等。
以下是宏定义的语法要求:1. 符号常量的宏定义:```c#define IDENTIFIER value```- `IDENTIFIER` 是你为常量定义的名称。
- `value` 是该常量的值。
示例:```c#define PI 3.14159```2. 函数宏的宏定义:```c#define MACRO_NAME(parameters) replacement```- `MACRO_NAME` 是你为函数宏定义的名称。
- `(parameters)` 是函数宏的参数列表。
- `replacement` 是用于替换宏调用的代码。
示例:```c#define SQUARE(x) ((x) * (x))```3. 多行宏定义:```c#define MACRO_NAME \statement1; \statement2;```4. 条件编译宏定义:```c#ifdef MACRO_NAME// 代码块1#else// 代码块2#endif```5. 字符串化运算符:```c#define STRINGIZE(x) #x```这个宏允许你将传递给它的参数转换为字符串。
例如:```c#define HELLO_WORLD_STRING STRINGIZE(Hello World)```在上述例子中,`HELLO_WORLD_STRING` 将被替换为字符串"Hello World"。
6. 连接运算符:```c#define CONCATENATE(x, y) x ## y```这个宏允许你连接两个标识符。
例如:```cint xy = CONCATENATE(3, 4); // 将被替换为int xy = 34;```以上是宏定义的一些基本语法要求。
请注意,使用宏时要小心,确保在宏定义中使用括号来确保优先级正确。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
UI_string_type(*gui_itoa)(S32 value,UI_string_type s,S32 radix) = NULL;//将整形数据转换为字符串,radix是进制,gui_atoi作用相反
UI_COLOR_RED
UI_COLOR_3D_FILLER
UI_COLOR_GREY
UI_COLOR_GREEN
GDI:
GDI_COLOR_WHITE
GDI_COLOR_BLACK
GDI_COLOR_GRAY
GDI_COLOR_RED
GDI_COLOR_BLUE
GDI_COLOR_GREEN
gui_set_font(&newfont);
注意:该设置只对英文起作用,汉字大小由字库文件决定。
六、颜色类:
1、常用颜色常量:
GUI:
UI_COLOR_LIGHT_GREY
UI_COLOR_WHITE
UI_COLOR_DARK_GREY
UI_COLOR_BLACK
UI_COLOR_NONE
gui_set_text_color
void (*gui_print_text)(UI_string_type_text) = NULL;//绘制文本
eg:gui_print_text(L"Hello");//只用于模拟器调试,真机不支持
gui_print_text((UI_string_type)GetString(STR_ID));//推荐使用,支持多语言
#define UI_FILLED_AREA_TYPE_GRADIENT_COLOR //渐进色
#define UI_FILLED_AREA_TYPE_TEXTURE //纹理
#define UI_FILLED_AREA_TYPE_BITMAP //位图
gdi_draw_point
3、绘制直线及线条:
gdi_draw_line
gdi_draw_line_style
4、绘制矩形及框
gdi_draw_rect
gdi_draw_solid_rect
void gdi_draw_frame_rect(S32 x1,S32 y1,S32 x2,S32 y2,gdi_color rect_color,gdi_color frame_color,S32 frame_width);//绘制带边框填充矩形
gdi_image_draw_animation_once
gdi_image_draw_animation_frames
gdi_image_draw_animation_single_frame
gdi_image_get_dimension
gdi_image_stop_animation
gdi_image_stop_animation_all
void (*gui_draw_rectangle)(S32 x1,S32 y1,S32 x2,S32 y2,color c) = NULL;
void (*gui_fill_rectangle)(S32 x1,S32 y1,S32 x2,S32 y2,color c) = NULL;//实心矩形
五、字体类:
1、字体封装结构体:
typedef struct stFontAttribute
{
U8 bold; //粗体,0正常,1粗体,下同
U8 italic; //斜体
U8 underline; //下划线
U8 size; //字号:SMALL_FONT,MEDIUM_FONT,LARGE_FONT,SUBLCD_FONT(副屏字体),DIALER_FONT(拨号字体),VIRTUAL_KEYBOARD_FONT(虚拟键盘字体)
三、图像类:
GDI:
绘制相关:
GDI_RESULT gdi_image_draw(S32 offset_x,S32 offset_y,U8 *image_ptr);
eg:gdi_image_draw(10,10,get_image(IMG_ID));
GDI_RESULT gdi_image_draw_id(S32 offset_x,S32 offset_y,U16 image_id);
可利用下面的方式设定需要的颜色:
GUI:
color my_color = {20,20,60,100};
GDI:
gdi_color my_gdi_color = gdi_act_color_from_rgb(255,255,103,102);
注意:my_color中第四个参数100和my_gdi_color第一个参数255表示透明度。
U8 color; //颜色,暂无效,使用gui_set_text_color实现
U8 type; //字体,暂无效
U8 oblique; //倾斜,比italic斜度小
U8 smallCaps; //小写锁定,暂无效
}
eg:stFontAttribute newfont = {0,0,0,MEDIUM_FONT,0,0};
color c; //背景色
color ac; //用于绘制交叉填充图形的替换色
color border_color; //边框颜色
color shadow_color; //阴影颜色
void (*gui_get_clip)(S32 *x1,S32 *y1,S32 *x2,S32 *y2) = NULL;//获得当前激活的剪裁区的大小
void (*gui_reset_clip)(void) = NULL;//重置图像剪切区到默认范围即屏幕大小
四、文本类:
void (*gui_move_text_cursor)(S32 x,S32 y) = NULL;//设定绘制文本处屏幕坐标
gui_print_text((UI_string_type)Str);//传递S8(char)类型字符数字指针
void (*gui_print_character)(UI_character_type c) = NULL;//在屏幕上输出一个字符
void (*gui_print_bordered_text)(UI_string_type_text) = NULL;//输出一个带边框的文本
UI_transparent_color_type transparent_color; //透明色
} UI_filled_area;
flags组合公式:flags = 类型标志 | 边框标志 | 阴影标志(可以是任意个数,不一定非得是3个一样一个)
对应类型如下:
12个类型标志:
#define UI_FILLED_AREA_TYPE_COLOR //颜色
gdi_image_decoder_free
gdi_image_decoder_decode_file
gdi_image_decoder_decode_file_with_output_clipping
gdi_image_decoder_get_dimension_file
gdi_image_decoder_stop
一、屏幕常用类:
clear_screen//清屏
entry_full_screen//全屏幕
gui_BLT_double_buffer//重绘
二、图形类:
GDI:
1、颜色格式转换(宏):
GDI_RGB_TO_BUFFER_FORMAT(R,G,B)
GDI_BUFFER_FORMAT_TO_RGB_R(VALUE)
#define UI_FILLED_AREA_TYPE_HATCH_COLOR //百叶窗(背景色c与原始底色交替)
#define UI_FILLED_AREA_TYPE_ALTERNATE_HATCH_COLOR //交叉百叶窗(背景色c与替换色ac交替)
gdi_anim_draw_id//通过ID绘制动态图片,6226版用gdi_image_draw_animation_id
eg:gdi_handle my_anim;
gdi_anim_draw_id(50,100,IMG_FIRSTAPP_ANIMATE,&my_anim);
gdi_anim_stop//停止动画播放
gdi_draw_round_rect
gdi_draw_button_rect
gdi_draw_shadow_rect
gdi_draw_gradient_rect
GUI:
void (*gui_putpixel)(S32 x,S32 y,color c) = NULL;//在x,y处绘制一个GUI颜色c
void (*gui_line)(S32 x1,S32 y1,S32 x2,S32 y2,color c) = NULL;
void (*gui_draw_horizontal_line)(S32 x1,S32 x2,S32 y,color c) = NULL;//绘制水平线
void (*gui_draw_vertical_line)(S32 y1,S32 y2,S32 x,color c) = NULL;//绘制垂直线
剪裁区相关:
void (*gui_push_clip)(void) = NULL;//进入剪切区域