当前位置: 首页 > news >正文

Python脚本生成包含标准的#ifndef保护宏的头文件

做一个python脚本,可以用python + 文件名的形式进行调用
 
 
 
 

以下是一个可以直接通过命令行调用的 Python 脚本:

方法一:独立脚本文件(推荐)

create_header.py

python
 
 
#!/usr/bin/env python3
"""
创建C语言头文件的脚本
用法: python create_header.py <文件名>
"""import sys
import osdef create_header_file(filename):"""生成一个C语言头文件,包含标准的#ifndef保护宏"""# 确保文件名以.h结尾if not filename.endswith('.h'):filename += '.h'# 生成保护宏(移除路径只保留文件名)base_name = os.path.basename(filename)guard_macro = f"_{base_name.upper().replace('.', '_')}_"content = f"""#ifndef {guard_macro}
#define {guard_macro}#endif /*{guard_macro}*/
"""with open(filename, 'w', encoding='utf-8') as f:f.write(content)print(f"✓ 已生成头文件: {filename}")def main():if len(sys.argv) != 2:print("用法: python create_header.py <文件名>")print("示例: python create_header.py user_config.h")sys.exit(1)filename = sys.argv[1]create_header_file(filename)if __name__ == "__main__":main()

方法二:单行命令版本

create_header_oneliner.py

python
 
 
#!/usr/bin/env python3
import sys, osif len(sys.argv) != 2:print("用法: python create_header_oneliner.py <文件名>")sys.exit(1)filename = sys.argv[1]
if not filename.endswith('.h'): filename += '.h'
guard = f"_{os.path.basename(filename).upper().replace('.', '_')}_"with open(filename, 'w') as f:f.write(f"#ifndef {guard}\n#define {guard}\n\n\n\n\n\n#endif /*{guard}*/\n")print(f"生成成功: {filename}")

使用方法:

bash
 
 
# 使用方法一
python create_header.py user_config.h# 或者(自动添加.h后缀)
python create_header.py user_config# 使用方法二
python create_header_oneliner.py my_header.h

方法三:制作成可执行文件(Linux/Mac)

bash
 
 
# 给脚本添加执行权限
chmod +x create_header.py# 然后可以直接执行
./create_header.py user_config.h

测试示例:

bash
 
 
# 创建测试文件
python create_header.py user_config.h# 查看生成的内容
cat user_config.h

输出结果:

c
 
 
#ifndef _USER_CONFIG_H_
#define _USER_CONFIG_H_#endif /*_USER_CONFIG_H_*/

这个脚本可以接受文件名作为参数,自动处理文件后缀和保护宏的生成,使用起来非常方便。

http://www.rkmt.cn/news/13196.html

相关文章:

  • sg.帮我写一个类似于vb6窗体设计的PySimpleGUI布局设计助手
  • IP新定义下的商业新范式:基于定制开发开源AI智能名片S2B2C商城小应用的IP价值变现研究
  • mysql的单表多大要考虑分库分表
  • 无刷电机速度闭环控制
  • 微信小程序云开发 授权手机号快捷登陆
  • newDay05
  • AtCoder Beginner Contest 425 ABCDEF 题目解析
  • maven打包依赖
  • 对话汇总:从东方哲学到可计算架构的演进
  • 25.9.27 继续MyBatis
  • MoeCTF 2025 二进制漏洞审计:boomboom_revenge
  • 威联通 NAS Docker 容器更新详解:从备份、推送到重建的全流程指南
  • UNIQUE VISION Programming Contest 2024 Autumn (AtCoder Beginner Contest 425)
  • loguru 日志库快速入门
  • 内存访问流程
  • NOIP模拟赛 十七
  • 2025 丹东店推荐:丽格门窗,用 20 年技术沉淀守护家的舒适
  • 2025 宁波门窗店推荐:丽格门窗,甬城品质家居的安心之选
  • 移动硬盘上的文件消失了?以下是Mac电脑解除方法
  • 2025 济南门窗店选购指南:丽格门窗凭硬实力圈粉品质家庭
  • 服务器系统时间不对?Linux系统时间修改与同步全面指南
  • 2025 常熟门窗店优选:丽格门窗,20 年技术沉淀的品质之选
  • 2025上海门窗店选购选丽格!20 年系统门窗经验,徐汇宜山路店品质之选
  • python+uniapp基于微信小程序美食点餐实用的系统
  • AI智能体框架怎么选?7个主流工具详细对比解析
  • 《深入浅出WPF》:8.3.2 自定义路由事件 事件注册类型为 EventHandlerReportTimeEventArgs,但.NET 事件包装器类型为 RoutedEventHandler
  • 2025 自动售货机工厂推荐 配备 Bystronic 激光切割机,快速周转准时交货
  • (基于江协科技)51单片机入门:1.LED - 指南
  • C# WPF实现ComboBox实时搜索与数据绑定 - 教程
  • 学术写作