求C语言函数大全函数名: abort
功能: 异常终止一个进程
用法: void abort(void);
程序例:
#include stdio.h
#include stdlib.h
int main(void)
{
printf("Calling abort()\n");
abort();
return 0; /* This is never reached */
}
函数名: abs
功能: 求整数的绝对值
用法: int abs(int i);
程序例:
#include stdio.h
#include math.h
int main(void)
{
int number = -1234;
printf("number: 赽solute value: %d\n", number, abs(number));
return 0;
}
函数名: absread, abswirte
功能: 绝对磁盘扇区读、写数据
用法: int absread(int drive, int nsects, int sectno, void *buffer);
int abswrite(int drive, int nsects, in tsectno, void *buffer);
程序例:
/* absread example */
#include stdio.h
#include conio.h
#include process.h
#include dos.h
int main(void)
{
int i, strt, ch_out, sector;
char buf[512];
printf("Insert a diskette into drive A and press any key\n");
getch();
sector = 0;
if (absread(0, 1, sector, buf) != 0)
{
perror("Disk problem");
exit(1);
}
printf("Read OK\n");
strt = 3;
for (i=0; i80; i)
{
ch_out = buf[strt i];
putchar(ch_out);
}
printf("\n");
return(0);
}
函数名: access
功能: 确定文件的访问权限
用法: int access(const char *filename, int amode);
程序例:
#include stdio.h
#include io.h
int file_exists(char *filename);
int main(void)
{
printf("Does NOTEXIST.FIL exist: %s\n",
file_exists("NOTEXISTS.FIL") ? "YES" : "NO");
return 0;
}
int file_exists(char *filename)
{
return (access(filename, 0) == 0);
}
函数名: acos
功能: 反余弦函数
用法: double acos(double x);
程序例:
#include stdio.h
#include math.h
int main(void)
{
double result;
double x = 0.5;
result = acos(x);
printf("The arc cosine of %lf is %lf\n", x, result);
return 0;
}
函数名: allocmem
功能: 分配DOS存储段
用法: int allocmem(unsigned size, unsigned *seg);
程序例:
#include dos.h
【c语言LOBYTE函数 c语言locate】#include alloc.h
#include stdio.h
int main(void)
{
unsigned int size, segp;
int stat;
size = 64; /* (64 x 16) = 1024 bytes */
stat = allocmem(size, segp);
if (stat == -1)
printf("Allocated memory at segment: %x\n", segp);
else
printf("Failed: maximum number of paragraphs available is \u\n",
stat);
return 0;
}
函数名: arc
功能: 画一弧线
用法: void far arc(int x, int y, int stangle, int endangle, int radius);
程序例:
#include graphics.h
#include stdlib.h
#include stdio.h
#include conio.h
int main(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int midx, midy;
int stangle = 45, endangle = 135;
int radius = 100;
/* initialize graphics and local variables */
initgraph(gdriver, gmode, "");
/* read result of initialization */
errorcode = graphresult();/* an error occurred */
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);/* terminate with an error code */
}
midx = getmaxx() / 2;
midy = getmaxy() / 2;
setcolor(getmaxcolor());
/* draw arc */
arc(midx, midy, stangle, endangle, radius);
/* clean up */
getch();
closegraph();
return 0;
}
函数名: asctime
功能: 转换日期和时间为ASCII码
用法: char *asctime(const struct tm *tblock);
程序例:
#include stdio.h
#include string.h
#include time.h
int main(void)
{
struct tm t;
char str[80];
/* sample loading of tm structure*/
t.tm_sec= 1;/* Seconds */
t.tm_min= 30; /* Minutes */
t.tm_hour= 9;/* Hour */
t.tm_mday= 22; /* Day of the Month*/
t.tm_mon= 11; /* Month */
t.tm_year= 56; /* Year - does not include century */
t.tm_wday= 4;/* Day of the week*/
t.tm_yday= 0;/* Does not show in asctime*/
t.tm_isdst= 0;/* Is Daylight SavTime; does not show in asctime */
/* converts structure to null terminated
string */
strcpy(str, asctime(t));
printf("%s\n", str);
return 0;
}
函数名: asin
功能: 反正弦函数
用法: double asin(double x);
程序例:
#include stdio.h
#include math.h
int main(void)
{
double result;
double x = 0.5;
result = asin(x);
printf("The arc sin of %lf is %lf\n", x, result);
return(0);
}
函数名: assert
功能: 测试一个条件并可能使程序终止
用法: void assert(int test);
程序例:
#include assert.h
#include stdio.h
#include stdlib.h
struct ITEM {
int key;
int value;
};
/* add item to list, make sure list is not null */
void additem(struct ITEM *itemptr) {
assert(itemptr != NULL);
/* add item to list */
}
int main(void)
{
additem(NULL);
return 0;
}
函数名: atan
功能: 反正切函数
用法: double atan(double x);
程序例:
#include stdio.h
#include math.h
int main(void)
{
double result;
double x = 0.5;
result = atan(x);
printf("The arc tangent of %lf is %lf\n", x, result);
return(0);
}
函数名: atan2
功能: 计算Y/X的反正切值
用法: double atan2(double y, double x);
程序例:
#include stdio.h
#include math.h
int main(void)
{
double result;
double x = 90.0, y = 45.0;
result = atan2(y, x);
printf("The arc tangent ratio of %lf is %lf\n", (y / x), result);
return 0;
}
函数名: atexit
功能: 注册终止函数
用法: int atexit(atexit_t func);
程序例:
#include stdio.h
#include stdlib.h
void exit_fn1(void)
{
printf("Exit function #1 called\n");
}
void exit_fn2(void)
{
printf("Exit function #2 called\n");
}
int main(void)
{
/* post exit function #1 */
atexit(exit_fn1);
/* post exit function #2 */
atexit(exit_fn2);
return 0;
}
函数名: atof
功能: 把字符串转换成浮点数
用法: double atof(const char *nptr);
程序例:
#include stdlib.h
#include stdio.h
int main(void)
{
float f;
char *str = "12345.67";
f = atof(str);
printf("string = %s float = %f\n", str, f);
return 0;
}
函数名: atoi
功能: 把字符串转换成长整型数
用法: int atoi(const char *nptr);
程序例:
#include stdlib.h
#include stdio.h
int main(void)
{
int n;
char *str = "12345.67";
n = atoi(str);
printf("string = %s integer = %d\n", str, n);
return 0;
}
函数名: atol
功能: 把字符串转换成长整型数
用法: long atol(const char *nptr);
程序例:
#include stdlib.h
#include stdio.h
int main(void)
{
long l;
char *str = "98765432";
l = atol(lstr);
printf("string = %s integer = %ld\n", str, l);
return(0);
}
关于c语言宏定义typedef unsigned char BYTE;
typedef unsigned short WORD;
意思是可以用BYTE替代unsigned char
是对的,BYTE,WORD是新的变量类型
#define LOBYTE(w)((BYTE)(WORD)(w))
这里是宏定义 。类似函数定义,w作为参数,是文本 。在编译时把LOBYTE(w)变为 ((BYTE)(WORD)(w)) 。比如输入:
WORD dat;
BYTE b ;
b=LOBYTE(dat);
编译时会替换为b=((BYTE)(WORD)(dat));意思是得到低字节部分 。
同理HIBYTE得到高字节部分
单片机的C语言中如何实现汇编中的中断程序,写哪里?还有org这个伪指令可以在C中实现吗?如果是用C去写的话,像汇编一样,开中断就行了 。位置一般就在MAIN 之前的 。
//晶振频率22.1184MHz
#includeat89x52.h
#define TIMER0H0x4c
#define TIMER0L0x00
#define TIMER0_RUNTR0=1
#define SECOND_OVERFLOW 40
#define SEG_PORTP0
#define DISPLAY_DIG1P1=0xf0;P1|=0x01
unsigned char g_CurrentDigit=0;//当前显示的数字
void timer() interrupt 1
{
static unsigned char s_Count = 0;
TH0 = TIMER0H;//重置定时器初值
TL0 = TIMER0L;
//每次进入中断服务程序,TH0和 TL0 的值都
TIMER0_RUN;//定时器运行,开始下一
if(s_Count != SECOND_OVERFLOW)
{//未到整秒,把 sCount 值加1
s_Count;
}
else
{//到整秒,s_Count归 0,更新把当前显示
s_Count = 0;
if(g_CurrentDigit != 9)
{
g_CurrentDigit;
}
else
{
g_CurrentDigit = 0;
}
}
return;
}
void Initial(void)//初始化
{
IE = 0x82;//仅允许Timer0 中断
TMOD = 0x01;//Timer0 使用工作方式 1(16位) , 定时器
TH0 = TIMER0H;//设置定时器初值
TL0 = TIMER0L;
TIMER0_RUN;//定时器开始运行
DISPLAY_DIG1;
}
void main()
{
unsigned char code SEG_CODE[]
= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
Initial();
while(1)
{
SEG_PORT = SEG_CODE[g_CurrentDigit];//显示当前的数字
//当timer0溢出时,单片机响应 timer0 中断,调用 timer 函数,
//每40 次调用当前显示的数字加 1
}
}
程序分析:
程序中主程序做的事只是在死循环中反复显示当前的数字,每产生一次中断,程序就跳
转到中断服务函数 timer()中进行相应的更新 。
这里中断服务函数 timer()有别于普通 C函数的地方是在声明中多了“interrupt 1” ,说明
这个函数是中断号为 1的中断服务函数 。各个中断对应的中断号如表 3.8所示 。
这个程序需要初始化的东西比较多,我们把这些初始化语句都放在了初始化函数 Initial()
中,这也是程序初始化很常见的做法 。我们还第一次用到了静态变量和全局变量 。全局变量
是中断处理函数与外界程序进行参数传递的唯一途径,因此在单片机程序中全局变量的使
用频率要比普通的 C 语言程序高 。尽管如此,由于全局变量的使用会影响程序的结构化,
所以在可以不使用全局变量的地方 , 还是要避免使用全局变量 。在程序中 , 为了把全局变
量与静态变量跟普通变量区别开来 , 我们在变量前分别加了小写 g_和小写 s_以示区别 。
IE 寄存器中的使能位和C中的中断号 中断源
0外部中断0
1定时器0溢出
2外部中断1
3定时器1溢出
4串行口中断
5
定时器2溢出(仅在S52、
C52中有此中断源)
好了,以上是我找的一个实例,希望对你有帮助!
c 获取串口号 c 自动获取串口号用C怎么写获取串口的内容
看驱动程序的接口啊
一般是是open(“口名”)
用C/C写一个小程序读取串口接收到的数据
你太幸运了,刚好我有一个,你在vc6.0下测试一下 。
/* serrecv.c */
/* Receives and saves a file over a serial port */
/* Last modified: Septemeber 21, 2005 */
/* [goman89] */
#include
#include
#include
/* Function to print out usage information */
void usage(void);
/* Function to set up the serial port settings with the specified baud rate,
no parity, and one stop bit */
void set_up_serial_port(HANDLE h, long baud);
/* Function to receive and save file from serial port */
void get_file_from_serial_port(HANDLE h, char *file_name, unsigned long file_length);
int main(int argc, char **argv)
{
HANDLE serial_port; /* Handle to the serial port */
long baud_rate = 9600; /* Baud rate */
char port_name[] = "COM1:"; /* Name of serial port */
unsigned long file_size; /* Size of file to receive in bytes */
unsigned long bytes_received; /* Bytes received from serial port */
unsigned long file_name_size; /* Size of file name in bytes */
char file_name[256]; /* Name of file to receive */
/* Check mand line */
if (argc == 3)
{
/* Read in baud rate */
if (argv[1][1] != 'b' || sscanf(argv[2], "%ld", baud_rate) != 1)
{
usage;
exit(0);
}
}
else if (argc != 1)
{
usage;
exit(0);
}
/* Open up a handle to the serial port */
serial_port = CreateFile(port_name, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
/* Make sure port was opened */
if (serial_port == INVALID_HANDLE_VALUE)
{
fprintf(stderr, "Error opening port\n");
CloseHandle(serial_port);
exit(0);
}
/* Set up the serial port */
set_up_serial_port(serial_port, baud_rate);
/* Receive file name size from serial port */
ReadFile(serial_port, (void *)file_name_size, sizeof(unsigned long), bytes_received, NULL);
if (bytes_received != sizeof(unsigned long))
{
fprintf(stderr, "Error getting file name size.\n");
CloseHandle(serial_port);
exit(0);
}
/* Receive file name from serial port */
ReadFile(serial_port, (void *)file_name, file_name_size, bytes_received, NULL);
if (bytes_received != file_name_size)
{
fprintf(stderr, "Error retrieving file name.\n");
CloseHandle(serial_port);
exit(0);
}
/* Append NULL terminator to end of string */
file_name[bytes_received] = '\0';
/* Receive file size from serial port */
ReadFile(serial_port, (void *)file_size, sizeof(unsigned long), bytes_received, NULL);
if (bytes_received != sizeof(unsigned long))
{
fprintf(stderr, "Error getting file size.\n");
CloseHandle(serial_port);
exit(0);
}
/* Get the file from the serial port */
get_file_from_serial_port(serial_port, file_name, file_size);
/* Print out success information */
printf("\n%lu bytes successfully received and saved as %s\n", file_size, file_name);
/* Close handle */
CloseHandle(serial_port);
return 0;
}
void usage(void)
{
fprintf(stderr, "Usage:\n");
fprintf(stderr, "\tserrecv [-b baud rate]\n");
fprintf(stderr, "\tDefault baud rate is 9600\n");
fprintf(stderr, "tSupported baud rates: 1200, 2400, 4800, 9600, 14400, 19200\n");
return;
}
void set_up_serial_port(HANDLE h, long baud)
{
DCB properties; /* Properties of serial port */
/* Get the properties */
GetmState(h, properties);
/* Set the baud rate */
switch(baud)
{
case 1200:
properties.BaudRate = CBR_1200;
break;
case 2400:
properties.BaudRate = CBR_2400;
break;
case 4800:
properties.BaudRate = CBR_4800;
break;
case 9600:
properties.BaudRate = CBR_9600;
break;
case 14400:
properties.BaudRate = CBR_14400;
break;
case 19200:
properties.BaudRate = CBR_19200;
break;
case 38400:
properties.BaudRate = CBR_38400;
break;
default:
fprintf(stderr, "Invalid baud rate: %ld\n", baud);
usage;
exit(0);
break;
}
/* Set the other properties */
properties.Parity = NOPARITY;
properties.ByteSize = 8;
properties.StopBits = ONESTOPBIT;
SetmState(h, properties);
return;
}
void get_file_from_serial_port(HANDLE h, char *file_name, unsigned long file_length)
{
FILE *data_file; /* File to create */
unsigned long bytes_left = file_length; /* Bytes left to receive */
unsigned long bytes_received_total = 0; /* Total bytes received */
unsigned long bytes_to_receive; /* Number of bytes to receive */
unsigned long bytes_received; /* Number of bytes receive */
char buffer[200]; /* Buffer to store data */
/* Open the file */
data_file = fopen(file_name, "wb");
/* Quit if file couldn't be opened */
if (data_file == NULL)
{
fprintf(stderr, "Could not create file %s\n", file_name);
CloseHandle(h);
exit(0);
}
while (1)
{
/* Determine how many bytes to read */
if (bytes_left == 0)
{
break;
}
else if (bytes_left200)
{
bytes_to_receive = bytes_left;
}
else
{
bytes_to_receive = 200;
}
/* Receive data over serial cable */
ReadFile(h, (void *)buffer, bytes_to_receive, bytes_received, NULL);
if (bytes_received != bytes_to_receive)
{
fprintf(stderr, "Error reading file.\n");
CloseHandle(h);
exit(0);
}
/* Save buffer to file */
fwrite((void *)buffer, 1, bytes_received, data_file);
/* Decrement number of bytes left */
bytes_left -= bytes_received;
/* Increment number of bytes received */
bytes_received_total= bytes_received;
/* Print out progress */
printf("\r%5lu bytes received.", bytes_received_total);
}
fclose(data_file);
return;
}
C语言变成实现串口收发数据
#include
#include
int main(void)
{
FILE *fp;
char temp;
char buf[100];
if((fp = fopen("3","r")) == NULL)
puts("this way doesn't work!\n");
else
puts("this way works!\n");
while(1)
{
temp = 0;
fscanf(fp,"%c",temp);
if(temp != 0)
putchar(temp);
else
Sleep(100);
}
fclose(fp);
return 0;
}
以前弄的,好久没看了,不知到对不对 。
还有下面这段:
#include
#include
HANDLE h;
int main(void)
{
h=CreateFile(TEXT("COM3"),//COM1口
GENERIC_READ|GENERIC_WRITE, //允许读和写
0, //独方式
NULL,
OPEN_EXISTING, //打开而不是创建
0, //同步方式
NULL);
if(h==(HANDLE)-1)
{
printf("打开COM失败!\n");
return FALSE;
}
else
{
printf("COM打开成功!\n");
}
Setupm(h,1024,1024); //输入缓冲区和输出缓冲区大小都是1024
COMMTIMEOUTS TimeOuts;
//设读超时
TimeOuts.ReadIntervalTimeout=1000;
TimeOuts.ReadTotalTimeoutMultiplier=500;
TimeOuts.ReadTotalTimeoutConstant=5000;
//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier=500;
TimeOuts.WriteTotalTimeoutConstant=2000;
SetmTimeouts(h,TimeOuts); //设置超时
DCB dcb;
GetmState(h,dcb);
dcb.BaudRate=9600; //波特率为9600
dcb.ByteSize=8; //每个字节有8位
dcb.Parity=NOPARITY; //无奇偶校验位
dcb.StopBits=ONE5STOPBITS; //两个停止位
SetmState(h,dcb);
DWORD wCount;//读取的节数
BOOL bReadStat;
while(1)
{
Purgem(h,PURGE_TXCLEAR|PURGE_RXCLEAR); //清缓冲区
char str[9]={0};
printf("%s\n",str);
bReadStat=ReadFile(h,str,9,wCount,NULL);
if(!bReadStat)
{
printf("
怎么通过串口读取51单片机某个地址的数据?请用C语言写出来 。
*
授人以鱼,不如授人以渔
*
首先,你要明确在C语中读取内存址是基于指针 。
3.比如读取内存地址0x22中的数据
C语言中对于内存的访是基于指,这个毋庸置疑 , 具体操如下
unsigned int *p= (unsigned int*)0x22 ;//定义针,并且使指针指向了0x22这个内存地址;
那么*p就是最终你要读取的数据了 。
4.至于如何通过串口显示到电脑我就不多了(这不是难点) , 据你都知道了,写到串口缓冲区 , 在串口调试助手下就可以看到 。
5.虽然没有贴出具体代码,但这里面的思想可以让你解决
标签:作文经典 上一篇:描写毛毛虫的词语 描写毛毛虫行动的词语 下一篇:成语误用褒贬的例子 褒贬误用的成语
Linux下如何使用c/c实现检测新增串口 , 并读取串口号
Linux下面有设文件
串口装好驱动后 会显示在dev下
然后对这个
C语言中如何对串口进行操作
C语言会有操作串口的库函数的,按照串口库数标识实现调
电脑上的串口号是什么意思
串口叫做串行接口,也串行通信接口,按电气标准及协议来分包括RS-232-C、RS-422、RS485、USB等 。RS-232-C、RS-422与RS-485标准对接口的电气特性做出规定,不涉及接插件、电缆或协议 。USB是近几年发展起来的新型接口标准,主要应用于速数据传输域 。RS-232-C:也称标准串口,是目前最常用的一种串行通讯接口 。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂共同制定的用于串行通讯的标 准 。它的名是“数据终端设备(DTE)和数据通讯设备(DCE)之间 行二进制数据交换接口技术标准” 。传统的RS-232-C接口标准有22根线,采用标准25芯D型插头座 。后来的PC上使用简化了的9芯D插座 。现在应用中25芯插头已很少采用 。现在的电脑般有两个串行口:COM1和COM2,你到计算机后面能看到9针D形接口就是了 。现在有很多手数据线或者物流接收器都采用COM
如何用C语言写一个读、写串口的程序?
大致过程就是
配置串口通信,包串口号、波特、验位、停止位这些信息;
打开串口,和打开文件一样,在Linux是这样 , Windows下没试过 , 估计也差不多;
发送数据,即写串口,就跟写文件类似;
读取
编写单片机串口收发数据的完整程序(C语言编写)
我用的新唐芯片 , 8051内核,跟51差不多,望采纳
void UART_Initial (void)
{
P02_Quasi_Mode; //Setting UART pin as Quasi mode for tran *** it
P16_Quasi_Mode; //Setting UART pin as Quasi mode for tran *** it
SCON_1 = 0x50; //UART1 Mode1,REN_1=1,TI_1=1
T3CON = 0x08; //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1), UART1 in MODE 1
clr_BRCK;
RH3 = HIBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
RL3 = LOBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
set_TR3; //Trigger Timer3
}
以上是初始化的
void Send_Data_To_UART1(UINT8 c)
{
TI_1 = 0;
SBUF_1 = c;
while(TI_1==0);
}
这个是发送
void UART_isr (void) interrupt 4 //
怎样在WINDOWS下用C语言编写串口接收数据程序
#include
#include
int main(void)
{
FILE *fp;
char temp;
char buf[100];
if((fp = fopen("3","r")) == NULL)
puts("this way doesn't work!\n");
else
puts("this way works!\n");
while(1)
{
temp = 0;
fscanf(fp,"%c",temp);
if(temp != 0)
putchar(temp);
else
Sleep(100);
}
fclose(fp);
return 0;
}
以前的,好久看 , 不知到对不对 。
还下面这段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include
#include
HANDLE h;
int main(void)
{
h=CreateFile(TEXT("COM3"),//COM1口
GENERIC_READ|GENERIC_WRITE, //允许读和写
0, //独占方式
NULL,
OPEN_EXISTING, //打开而不是建
0, //同步式
NULL);
if(h==(HANDLE)-1)
{
printf("打开COM失败!\n");
return FALSE;
}
else
{
printf("COM打开成功!\n");
}
Setupm(h,1024,1024); //输入缓冲区和输出缓冲区的大小都是1024
COMMTIMEOUTS TimeOuts;
//定读超时
TimeOuts.ReadIntervalTimeout=1000;
TimeOuts.ReadTotalTimeoutMultiplier=500;
TimeOuts.ReadTotalTimeoutConstant=5000;
//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier=500;
TimeOuts.WriteTotalTimeoutConstant=2000;
SetmTimeouts(h,TimeOuts); //设置超时
DCB dcb;
GetmState(h,dcb);
dcb.BaudRate=9600; //波特率为9600
dcb.ByteSize=8; //每个字节有8位
dcb.Parity=NOPARITY; //无奇偶校验位
dcb.StopBits=ONE5STOPBITS; //两个停止位
SetmState(h,dcb);
DWORD wCount;//读取的字节
BOOL bReadStat;
while(1)
{
Purgem(h,PURGE_TXCLEAR|PURGE_RXCLEAR); //清空缓冲区
char str[9]={0};
printf("%s\n",str);
bReadStat=ReadFile(h,str,9,wCount,NULL);
if(!bReadStat)
{
printf("读串口
标签:作文经典 上一篇:描写毛毛虫的词语 描写毛毛虫行动的词语 下一篇:成语误用褒贬的例子 褒贬误用的成语
c语言LOBYTE函数的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于c语言locate、c语言LOBYTE函数的信息别忘了在本站进行查找喔 。
推荐阅读
- 邵逸夫公众号怎么解开绑定的简单介绍
- wordpress网页推荐,wordpress做网页
- 益智游戏体育,益智类体育
- 国外休闲类游戏,国外休闲类游戏排行榜
- 函数添加属性python python 添加函数
- chatgpt有学习功能吗,chattype
- impala和hbase区别,hbase和mapreduce的关系
- 杭州棋牌游戏招牌的简单介绍
- iter函数python python__iter__