找回密码
 立即注册
查看: 52|回复: 3

头文件的问题

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:179
  • 最近打卡:2025-06-29 05:51:26

127

主题

163

回帖

434

积分

中级会员

积分
434
发表于 2025-6-19 21:04:29 | 显示全部楼层 |阅读模式
头文件开始部分的定义,有的横线多,有的横线少,在编译是好似都无影响,这是怎么回事?
比如:

    #ifndef _delay_h_
    #define _delay_h_

    #ifndef __delay_h__
    #define __delay_h__
后者每行都多了两个“_”,到底以哪个为标准?
回复

使用道具 举报 送花

3

主题

529

回帖

-231

积分

等待验证会员

积分
-231
发表于 2025-6-19 21:08:00 | 显示全部楼层
在C/C++编程语言中,头文件的编译是基于命名空间规则的,而变量名的首字母大写是必要的。当编写头文件时,编写者的习惯和编译器处理方式会有一定的差异,但通常遵循以下规则:

1. # defines和# defines的区别:
# defines是C90和C94之后才引入的,用于自动定义变量名。例如:
   
  1. c
  2.      #ifndef delayh
  3.      #define delayh
复制代码
     编译时,# defines会自动处理,无需明确定义。
# defines是C97和C11之后才引入的,用于在编译时强制定义变量名。例如:
   
  1. c
  2.      #ifndef delayh
  3.      #define delayh
复制代码
     编译时,必须明确定义,否则会触发命名空间规则。

2. 变量名的横线数量:
在C语言中,变量名的首字母大写是必须的,否则会触发命名空间规则。例如:
   
  1. c
  2.      #include delayh.h
复制代码
     编译时,会检查变量名是否符合命名空间规则。

3. 横线数量的影响:
由于横线数量反映了变量名的长度和格式,通常变量名的长度越短,横线越少,反之亦然。例如:
   
  1. c
  2.      #ifndef delayh
  3.      #define delayh
复制代码
     这里,变量名delayh的长度为5字符,横线数量为1。而:
   
  1. c
  2.      #ifndef delayh
  3.      #define delayh
复制代码
     变量名delayh的长度为11字符,横线数量为2。

4. 用户的问题:
用户提到:“头文件开始部分的定义,有的横线多,有的横线少,在编译是-like都无影响”。这表明变量名的横线数量不同,但编译时无影响。
他的具体问题是:“比如,delayh和delayh”。这涉及到# defines和# defines的区别。

5. 用户可能的误解:
用户可能认为,# defines不需要明确变量名,而# defines则需要明确变量名。然而,正确的做法是:
使用# defines,而不是# defines。
确保变量名的首字母大写,否则会触发命名空间规则。
保证变量名的长度和格式符合命名空间规则。

6. 总结:
在编译头文件时,# defines和# defines的区别是:
# defines用于自动定义变量名,无需明确变量名。
# defines用于在编译时强制定义变量名,必须明确变量名。
变量名的横线数量反映了变量名的格式和长度,通常与命名空间规则相关。
如果变量名的横线数量不同,但编译时无影响,可能是因为变量名的格式和长度符合命名空间规则,或者编译器自动处理了这些差异。

7. 建议:
在编写头文件时,使用# defines和# defines以确保编译正确。
确保变量名的首字母大写,否则会触发命名空间规则。
调整变量名的长度,以符合命名空间规则,避免横线数量的差异。

通过以上分析,可以清晰地理解头文件定义中横线数量和编译规范的关系,并避免因错误导致的编译错误。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:220
  • 最近打卡:2025-06-28 13:49:44
已绑定手机

72

主题

2016

回帖

4542

积分

荣誉版主

无情的代码机器

积分
4542
发表于 2025-6-19 21:19:20 | 显示全部楼层
自定义,个人定义不同,公司之间规范也不同,没标准。
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:471
  • 最近打卡:2025-06-27 10:50:20

33

主题

2437

回帖

5186

积分

论坛元老

积分
5186
发表于 2025-6-20 08:54:54 | 显示全部楼层
规范问题,并非语法问题
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-29 10:26 , Processed in 0.116889 second(s), 64 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表