为什么keil编译*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
时间: 2024-01-17 12:19:41 浏览: 638
keil编译错误*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS是由于在同一个工程中存在多个具有相同名称的公共定义(例如函数或变量)导致的。根据引用中提供的解决方法,当一个工程中有多个.c文件,并且这些文件中都有相同名称的main函数时,编译器会报错。因为在一个工程中只能有一个main函数。
解决这个问题的方法是注释掉其中一个文件中的main函数。这样做可以确保只有一个main函数被编译器识别和使用,从而避免重定义错误。
以下是一个示例,展示了如何解决这个问题:
```c
// File1.c
#include <stdio.h>
void function1()
{
printf("This is function 1\n");
}
// File2.c
#include <stdio.h>
void function2()
{
printf("This is function 2\n");
}
// Main.c
#include <stdio.h>
// 注释掉其中一个main函数
/*
int main()
{
function1();
return 0;
}
*/
int main()
{
function2();
return 0;
}
```
在上面的示例中,我们有三个.c文件:File1.c,File2.c和Main.c。最初,两个文件中都有一个main函数。通过注释掉其中一个main函数,我们解决了重定义错误。
相关问题
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: READ_DS18B20
回答: 错误L104:多个公共定义是指在程序中出现了多次对同一个符号的公共定义。\[1\]\[2\]这个错误通常发生在使用编译工具时,比如KEILC51,当在多个模块中重复定义了同一个符号时会出现这个错误。\[2\]为了解决这个错误,可以使用extern关键字在头文件中声明全局变量,然后在一个c文件中定义并初始化该变量。这样可以避免重复定义的错误。\[3\]
根据你的问题,*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: READ_DS18B20,这个错误提示是指在程序中多次定义了READ_DS18B20这个符号。你需要检查你的代码,确保只有一个地方对READ_DS18B20进行了定义。如果有多个地方定义了该符号,你可以使用extern关键字在头文件中声明该变量,然后在一个c文件中进行定义和初始化。这样可以解决这个错误。
#### 引用[.reference_title]
- *1* [遇到编译问题ERROR L104: MULTIPLE PUBLIC DEFINITIONS重复定义](https://blog.csdn.net/u012539330/article/details/41350115)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [51单片机编译错误笔记一(ERROR L104: MULTIPLE PUBLIC DEFINITIONS)](https://blog.csdn.net/qq_34797393/article/details/104244768)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [2015.02.15 Keil中*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS](https://blog.csdn.net/u012363005/article/details/51810192)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
keil error l104: multiple public definitions
当编译器报告"keil error l104: multiple public definitions"错误时,意味着在代码中存在多个重复的公共定义。
公共定义是指在代码中定义的可以在其他文件中访问的变量、函数或其他数据。在C或C++中,每个文件都应该有自己独特的公共定义,以避免发生重复定义的情况。
多个公共定义的错误通常是由以下几种情况引起的:
1. 头文件重复包含:当多个文件包含了同一个头文件时,会导致其中的定义被重复插入到每个文件中。此时,编译器在最终链接时会发现多个重复的定义,从而产生错误。
解决方法:在头文件中使用预处理指令条件编译,如#ifndef和#define,以确保头文件只包含一次。
2. 变量或函数重复定义:在不同的文件中对同一个变量或函数进行了重复定义。
解决方法:将重复定义的变量或函数放在一个单独的源文件中,并在其他文件中使用extern关键字声明它们,以避免重复定义。
3. 定义了相同的全局符号:如果多个文件中定义了相同名称的全局符号,例如函数或变量名,编译器将无法分辨应该使用哪个定义。
解决方法:检查代码中是否存在相同名称的全局符号,并为它们添加前缀或更改名称,以使它们在整个项目中唯一。
总之,"keil error l104: multiple public definitions"错误提示了存在多个重复的公共定义。遵循以上解决方法,我们可以修复这个错误,确保每个定义都是唯一的。
阅读全文