C头文件声明时 #ifndef __与#ifndef_的区别
时间: 2024-05-21 16:14:30 浏览: 117
在C语言中,头文件通常使用预处理指令 `#ifndef` 来避免重复包含,避免造成重复定义的错误。而在 `#ifndef` 后面通常会跟着宏定义的名称,用于标识该头文件是否已经被包含过了。在这种情况下,通常有两种方式来定义宏:
1. `#ifndef __MYHEADER_H__`,这里的 `__MYHEADER_H__` 是一个标识符,可以是任何合法的标识符。这种方式的好处是能够避免与其他头文件的宏定义冲突。
2. `#ifndef MYHEADER_H`,这里的 `MYHEADER_H` 是一个不带下划线的标识符。这种方式可能会与其他头文件的宏定义冲突,因为在C语言中,下划线开头的标识符通常被保留作为编译器或库的内部使用。
总的来说,两种方式都可以用于头文件的宏定义,但建议使用第一种方式,以避免可能的冲突。
相关问题
#ifndef __MAIN__ #define __MAIN__ 的作用
#ifndef __MAIN__ 是一个条件编译指令,它的作用是在编译过程中判断是否已经定义了宏 __MAIN__。如果没有定义该宏,就会执行 #ifndef 和 #endif 之间的代码,否则会跳过这段代码。
这个条件编译指令通常用于防止头文件的重复包含。在一个项目中,可能会有多个源文件需要包含同一个头文件,如果没有条件编译指令的保护,就会导致头文件的内容被重复定义,从而引发编译错误。
通过使用 #ifndef __MAIN__,可以确保头文件只被包含一次,避免了重复定义的问题。这样可以提高编译效率,并且保证了代码的正确性。
#ifndef __DS18B20_H__ #define __DS18B20_H__ void DS18B20_ConvertT(void); float DS18B20_ReadT(void); #endif
问题: #ifndef __DS18B20_H__ #define __DS18B20_H__ void DS18B20_ConvertT(void); float DS18B20_ReadT(void); #endif
回答: 这段代码是一个头文件的定义,其中声明了两个函数DS18B20_ConvertT和DS18B20_ReadT。DS18B20_ConvertT函数用于将DS18B20传感器转换为温度值,而DS18B20_ReadT函数用于读取DS18B20传感器的温度值,并返回一个浮点数。这个头文件的作用是为了在其他源文件中使用这两个函数时,可以直接包含这个头文件,而不需要重复声明函数。
#### 引用[.reference_title]
- *1* [液晶显示温度(DS18B20)](https://blog.csdn.net/weixin_44690490/article/details/112427023)[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* *3* [STM32F407霸天虎HAL库CubeMX学习笔记——DS18B20](https://blog.csdn.net/weixin_43329283/article/details/126865060)[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 ]
阅读全文