static declaration of 'uart_init' follows non-static declaration
时间: 2023-11-09 08:08:00 浏览: 37
这个错误表示在代码中先有一个非静态(non-static)的函数声明,后面又有一个同名的静态(static)函数声明。在 C 语言中,同名的函数只能有一个定义,而这两个声明是不一致的,编译器就无法确定该使用哪个函数定义,从而报错。
解决方法是将其中一个函数的声明更改为与另一个函数相同的类型。如果需要同时使用两个同名的函数,则可以将其中一个函数重命名或者改变其参数类型或数量,以避免冲突。
相关问题
error: static declaration of ‘gettid’ follows non-static declaration | _syscall0(int, gettid)
这个错误是由于在程序中重复定义了gettid函数,其中一个是非静态定义,另一个是静态定义。这种错误通常发生在包含多个源文件的大型程序中。
为了解决这个问题,您可以将其中一个函数的定义改为static,或者将其中一个函数的名称更改为避免名称冲突。您还可以使用头文件保护来确保每个源文件只包含一次定义。
例如,在您的头文件中,您可以这样写:
```
#ifndef MY_HEADER_FILE_H
#define MY_HEADER_FILE_H
// 声明gettid函数
int gettid();
#endif
```
然后在您的源文件中,您可以这样定义gettid函数:
```
#include "my_header_file.h"
#include <sys/syscall.h>
#include <unistd.h>
// 定义gettid函数
int gettid() {
return syscall(SYS_gettid);
}
```
这样就可以避免重复定义gettid函数的问题了。
error: static declaration of ‘pd_get_param’ follows non-static declaration
这个错误通常是因为在代码中已经存在了一个非静态声明的函数或变量,而后面又声明了一个同名的静态函数或变量。
解决方法有两种:
1. 你可以将后面的声明改为非静态的。这样就不会再出现重复声明的问题了。
2. 如果你确实需要同时存在静态和非静态的同名函数或变量,那么可以将它们分别放在不同的文件中,并在头文件中使用 extern 关键字声明。这样就可以避免重复声明的问题了。例如:
```c
// file1.c
int pd_get_param(int a, int b) {
// ...
}
// file2.c
static int pd_get_param(int a, int b) {
// ...
}
// pd.h
#ifndef PD_H
#define PD_H
extern int pd_get_param(int a, int b);
#endif
```