Files
张宗平 13b3ebbe14 课程代码仓库初始化:Part1 (144) + Part3 (29) 全量生成与验证
把川大 wiki「02.Qt方向」课程代码整理为 CMake 管理的可编译运行项目。

Part1 C/C++ 强化 (p01/, 144 目标, host gcc/g++ 构建, 全绿):
- 修复全部编译失败:补 <cstring>/<fstream>/<iomanip>/<vector> 等缺失头
  (common_fix + infer_stl_includes 自动检测注入)、修正 pause() 壳注入
  (改检测已转换后的 pause 调用)、namespace 提升出函数体、const 成员函数
  正确性、dedupe 不再破坏函数重载集、K&R 隐式 int / 动态异常规范等
  C++17 移除特性的可编译等价改写。
- 目录采用深缩写 p01/ch04/s03/ (原 part1_cpp/ch04_class_object/03_ctor_dtor)。

Part3 Qt 桌面 (p03/, 29 目标, 隔离 Qt 5.14.2 构建, 全绿):
- gen_part3.py: Qt 外壳模板 (main+QApplication+show, QTimer 自动退出便于
  offscreen 验证)、AUTOMOC + .moc include、rewrite_* 处理散文混入/重载/
  资源依赖、生成占位 png/gif + .qrc + rundata 样例数据。
- 修正 QLable 笔误、全角分号、.→->、Windows 路径、QApplication 阻塞事件
  循环改为 QCoreApplication 等。

任务1 概念/版本验证:
- tools/std_probe.py: 跨 -std= 编译探针 (--pedantic-errors 让已废除特性硬失败)。
- tools/demo_versions/: K&R 隐式 int、三目左值、void* 转换、enum 赋整、
  const 经指针、动态异常规范 共 6 个跨版本演示。
- docs/VERSION_NOTES.md: 每条「原文说法→C17/C++17 是否成立→何版本成立→已验证」。

文档: 顶层 README、docs/SOURCE_PAGES.md (页面→目录映射)、
docs/ERRATA.md (Part1 修正)、docs/ERRATA_part3.md (Part3 修正)。
另修复 tools/run.sh / run_qt.sh 的 ${1:?...} 引号语法 bug。

隔离 Qt 验证: ldd 0 系统 Qt 引用; 173/173 目标全绿; p03 offscreen 运行通过。
2026-06-30 14:16:55 +08:00

213 lines
12 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ==============================================================================
# file_name_map.py — 每个 (pageId, section_title) → 英文源文件名词根
#
# 规则(按用户要求):
# * 源文件名用英文,与章节/小节名称匹配(按章节号或语义命名)。
# * 同一小节内有多个源文件时,追加语义后缀区分。
# * 文件名仅含 [a-z0-9_],蛇形命名。
#
# 本表为人工映射,是 gen_part1.py / gen_part3.py 的输入。
# 键 = (pageId, section_title);值 = 英文词根(不含扩展名/前缀)。
# ==============================================================================
FILE_NAME_MAP = {
# ---- ch02 intro (58954438) ----
("58954438", "2.1.1 c++ hello world"): "hello_world",
# ---- ch03 C++对C的扩展 (58954439) ----
("58954439", "3.1 ::作用域运算符"): "scope_resolution_operator",
("58954439", "3.2.2命名空间使用语法"): "namespace_syntax",
("58954439", "3.2.3 using声明"): "using_declaration",
("58954439", "3.2.4 using编译指令"): "using_directive",
("58954439", "3.3 全局变量检测增强"): "global_variable_detection",
("58954439", "3.4 C++中所有的变量和函数都必须有类型"): "strict_function_signatures",
("58954439", "3.5 更严格的类型转换"): "stricter_type_casting",
("58954439", "3.6 struct类型加强"): "struct_enhancement",
("58954439", "3.7 \u201c新增\u201dbool类型关键字"): "bool_keyword",
("58954439", "3.8 三目运算符功能增强"): "ternary_operator",
("58954439", "3.8.2.3 C/C++中const异同总结"): "const_diff_summary",
("58954439", "3.9.3 尽量以const替换#define"): "const_vs_define",
("58954439", "3.10.1 引用基本用法"): "reference_basics",
("58954439", "3.10.2 函数中的引用"): "reference_in_function",
("58954439", "3.10.3 引用的本质"): "reference_essence",
("58954439", "3.10.4 指针引用"): "pointer_reference",
("58954439", "3.10.5 常量引用"): "const_reference",
("58954439", "3.11.2 预处理宏的缺陷"): "macro_pitfalls",
("58954439", "3.11.3.2 类内部的内联函数"): "inline_in_class",
("58954439", "3.12 函数的默认参数"): "default_arguments",
("58954439", "3.13 函数的占位参数"): "placeholder_parameters",
("58954439", "3.14.2.1 函数重载基本语法"): "function_overload_basics",
("58954439", "3.14.2.2 函数重载实现原理"): "function_overload_mechanism",
("58954439", "3.14.3 extern \u201cC\u201d浅析"): "extern_c",
# ---- ch04 class_object ----
# 01 基本概念 (58954448)
("58954448", "4.1.2 类的封装"): "class_encapsulation",
("58954448", "4.1.3 将成员变量设置为private"): "private_members",
# 02 面向对象案例 (58954449)
("58954449", "4.2.1 设计立方体类"): "cube_class_design",
("58954449", "4.2.2 点和圆的关系"): "point_and_circle",
# 03 构造和析构 (58954451)
("58954451", "4.3.2 构造函数和析构函数"): "ctor_and_dtor",
("58954451", "4.3.3 构造函数的分类及调用"): "ctor_classification",
("58954451", "4.3.4 拷贝构造函数的调用时机"): "copy_ctor_timing",
("58954451", "4.3.6 深拷贝和浅拷贝"): "deep_vs_shallow_copy",
("58954451", "4.3.7.1 初始化列表"): "initializer_list",
("58954451", "4.3.7.2 类对象作为成员"): "class_object_member",
("58954451", "4.3.8 explicit关键字"): "explicit_keyword",
("58954451", "4.3.9.2 C动态分配内存方法"): "c_dynamic_alloc",
("58954451", "4.3.9.3 new operator"): "new_operator",
("58954451", "4.3.9.4 delete operator"): "delete_operator",
("58954451", "4.3.9.5 用于数组的new和delete"): "new_delete_array",
("58954451", "4.3.9.6 delete void*可能会出错"): "delete_void_ptr",
("58954451", "4.3.10.1 静态成员变量"): "static_member_variable",
("58954451", "4.3.10.2 静态成员函数"): "static_member_function",
("58954451", "4.3.10.3 const静态成员属性"): "const_static_member",
("58954451", "4.3.10.4 静态成员实现单例模式"): "static_singleton",
# 04 对象模型 (58954456)
("58954456", "4.4.1 成员变量和函数的存储"): "member_storage",
("58954456", "4.4.2.2 this指针的使用"): "this_pointer",
("58954456", "4.4.2.3 const修饰成员函数"): "const_member_function",
("58954456", "4.4.2.4 const修饰对象(常对象)"): "const_object",
# 05 友元 (58954457)
("58954457", "4.5.1 友元语法"): "friend_syntax",
# 06 运算符重载 (58954458)
("58954458", "4.6.2 运算符重载碰上友元函数"): "overload_with_friend",
("58954458", "4.6.4 自增自减(++/--)运算符重载"): "overload_increment_decrement",
("58954458", "4.6.5 指针运算符(*、->)重载"): "overload_pointer_operator",
("58954458", "4.6.6 赋值(=)运算符重载"): "overload_assignment",
("58954458", "4.6.7 等于和不等于(==、!=)运算符重载"): "overload_equality",
("58954458", "4.6.8 函数调用符号()重载"): "overload_function_call",
# 07 继承和派生 (58954461)
("58954461", "4.7.1.1 为什么需要继承"): "why_inheritance",
("58954461", "4.7.2 派生类访问控制"): "derived_access_control",
("58954461", "4.7.3.1 继承中的对象模型"): "inheritance_object_model",
("58954461", "4.7.3.2 对象构造和析构的调用原则"): "inheritance_ctor_dtor_order",
("58954461", "4.7.3 继承中同名成员的处理方法"): "same_name_members",
("58954461", "4.7.5 继承中的静态成员特性"): "static_in_inheritance",
("58954461", "4.7.6.1 多继承概念"): "multiple_inheritance_concept",
("58954461", "4.7.6.2 菱形继承和虚继承"): "diamond_virtual_inheritance",
("58954461", "4.7.6.3 虚继承实现原理"): "virtual_inheritance_mechanism",
# 08 多态 (58954469)
("58954469", "4.8.1 多态基本概念"): "polymorphism_basics",
("58954469", "4.8.2.1 问题抛出"): "upcast_problem",
("58954469", "4.8.2.1 问题解决方案(虚函数,vitual function)"): "virtual_function_solution",
("58954469", "4.8.3 C++如何实现动态绑定"): "dynamic_binding",
("58954469", "4.8.6.1 虚析构函数作用"): "virtual_dtor_purpose",
("58954469", "4.8.6.2 纯虚析构函数"): "pure_virtual_dtor",
("58954469", "4.8.7 重写 重载 重定义"): "override_overload_redefine",
# ---- ch05 模板 (58954472) ----
("58954472", "5.2 函数模板"): "function_template",
("58954472", "5.3 函数模板和普通函数区别"): "template_vs_function",
("58954472", "5.4 函数模板和普通函数在一起调用规则"): "template_call_rules",
("58954472", "5.6模板的局限性"): "template_limitations",
("58954472", "5.7.1 类模板基本概念"): "class_template_basics",
("58954472", "5.7.2 类模板做函数参数"): "class_template_as_param",
("58954472", "5.7.3 类模板派生普通类"): "class_template_derives_class",
("58954472", "5.7.4 类模板派生类模板"): "class_template_derives_template",
("58954472", "5.7.5 类模板类内实现"): "class_template_in_class_impl",
("58954472", "5.7.6 类模板类外实现"): "class_template_out_of_class_impl",
("58954472", "5.7.7 模板类碰到友元函数"): "class_template_friend",
("58954472", "5.8 类模板的应用"): "class_template_application",
# ---- ch06 类型转换 (58954473) ----
("58954473", "6.1 静态转换(static_cast)"): "static_cast_demo",
("58954473", "2.2 动态转换(dynamic_cast)"): "dynamic_cast_demo",
("58954473", "2.3 常量转换(const_cast)"): "const_cast_demo",
# ---- ch07 异常 (58954474) ----
("58954474", "7.1 异常基本概念"): "exception_basics",
("58954474", "7.2.1 异常基本语法"): "exception_syntax",
("58954474", "7.2.2 异常严格类型匹配"): "exception_type_matching",
("58954474", "7.2.3 栈解旋(unwinding)"): "stack_unwinding",
("58954474", "7.2.4 异常接口声明"): "exception_specification",
("58954474", "7.2.5 异常变量生命周期"): "exception_variable_lifetime",
("58954474", "7.2.6 异常的多态使用"): "exception_polymorphism",
("58954474", "7.3.1 标准库介绍"): "std_exception_library",
("58954474", "7.3.2 编写自己的异常类"): "custom_exception_class",
# ---- ch08 IO流 (58954476) ----
("58954476", "8.3 标准输入流"): "standard_input_stream",
("58954476", "8.4.1 字符输出"): "character_output",
("58954476", "8.4.2 格式化输出"): "formatted_output",
("58954476", "8.4.4 C++对ASCII文件的读写操作"): "ascii_file_io",
("58954476", "8.4.5 C++对二进制文件的读写操作"): "binary_file_io",
# ---- ch09 STL ----
# 02 三大组件 (58954487)
("58954487", "2.4 案例"): "stl_components_case",
# 03 常用容器 (58954488)
("58954488", "3.1.2.9 string和c-style字符串转换"): "string_and_c_string",
("58954488", "3.2.2 vector迭代器"): "vector_iterator",
("58954488", "3.2.5.1巧用swap,收缩内存空间"): "vector_swap_shrink",
("58954488", "3.2.5.2 reserve预留空间"): "vector_reserve",
("58954488", "3.6.3 list容器的数据结构"): "list_data_structure",
("58954488", "3.7.2.5 set查找操作"): "set_find_operations",
("58954488", "3.8.3 multimap案例"): "multimap_case",
# 04 常用算法 (58954498)
("58954498", "4.1 函数对象"): "function_object",
("58954498", "4.2 谓词"): "predicate",
("58954498", "4.3 内建函数对象"): "builtin_function_object",
("58954498", "4.3 常用遍历算法"): "traversal_algorithms",
# ======================================================================
# Part 3 — Qt 桌面应用开发 (p03)
# ======================================================================
# ---- ch02 创建Qt项目 (58954515) ----
("58954515", "一个最简单的Qt应用程序"): "minimal_qt_app",
# ---- ch03 第一个Qt小程序 (58954525) ----
("58954525", "3.1 按钮的创建"): "button_creation",
("58954525", "3.2 对象模型(对象树)"): "object_tree_model",
# ---- ch04 信号和槽机制 (58954527) ----
("58954527", "4.1 系统自带的信号和槽"): "builtin_signal_slot",
("58954527", "4.2 自定义信号和槽"): "custom_signal_slot",
("58954527", "4.4 Qt4版本的信号槽写法"): "qt4_signal_slot_style",
("58954527", "4.5 Lambda表达式"): "lambda_signal_slot",
# ---- ch05 QMainWindow (58954529) ----
("58954529", "5.1 菜单栏"): "menubar",
("58954529", "5.3 状态栏"): "statusbar",
("58954529", "5.4 铆接部件"): "dock_widget",
("58954529", "5.5 核心部件(中心部件)"): "central_widget",
("58954529", "5.6 资源文件"): "resource_file",
# ---- ch06 对话框QDialog (58954535) ----
("58954535", "模态对话框"): "modal_dialog",
("58954535", "非模态对话框"): "modeless_dialog",
("58954535", "6.4 消息对话框"): "message_box",
("58954535", "6.5 标准文件对话框"): "file_dialog",
# ---- ch08 常用控件 (58954540) ----
("58954540", "显示文字 (普通文本、html"): "label_text",
("58954540", "显示图片"): "label_pixmap",
("58954540", "显示动画"): "label_movie",
("58954540", "设置/获取内容"): "lineedit_content",
("58954540", "设置显示模式"): "lineedit_echo_mode",
("58954540", "8.4 自定义控件"): "custom_widget",
# ---- ch09 Qt消息机制和事件 (58954546) ----
("58954546", "9.1 事件"): "mouse_event",
("58954546", "9.2 event()"): "event_override",
("58954546", "9.3 事件过滤器"): "event_filter",
("58954546", "9.4 总结"): "event_summary",
# ---- ch10 绘图和绘图设备 (58954548) ----
("58954548", "10.1 QPainter"): "qpainter_basic",
("58954548", "10.2.1 QPixmap、QBitmap、QImage"): "paint_device_pixmaps",
("58954548", "10.2.2 QPicture"): "qpicture_io",
# ---- ch11 文件系统 (58954552) ----
("58954552", "11.1 基本文件操作"): "qfile_basic",
("58954552", "11.2 二进制文件读写"): "qdatastream_io",
("58954552", "11.3 文本文件读写"): "qtextstream_io",
}
def stem_for(pid, section_title):
"""Return the english filename stem for a (pageId, section_title), or None."""
return FILE_NAME_MAP.get((pid, section_title))