swift2.0 常用标注 //MARK-: 替换 #pragma mark - #warning

本文介绍如何在Swift中使用不同类型的代码注释(如TODO, FIXME, MARK)及如何将它们转换为警告提示,方便开发者管理和追踪代码任务。

http://blog.youkuaiyun.com/lengshengren/article/details/49129043

//MARK:冒号后 添加注释说明 - 添加横线 列如下

//MARK:- 初始化

这里写图片描述

//FIXME: 表示此处有bug 或者要优化 列如下

这里写图片描述

//TODO: 一般用于写到哪了 做个标记,让后回来继续 例如下

//TODO: 今天就先写到这吧睡觉 明天继续 
这里写图片描述

// #warning swift2.0 中下面发放替换

    @available(iOS, deprecated=1.0, message="I'm not deprecated, please ***setUpElements**")
 
  • 1
  • 1

星星里面代表警告的方法

fun setUpElements (){

}
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

这里写图片描述

也可以 把//TODO: 和//FIXME: 加上警告 如下面操作


这里写图片描述


这里写图片描述

3

TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

这里写图片描述

运行

这里写图片描述

参考这里


<think> 嗯,用户这次的问题相当专业啊,是在询问关于编译器中"ACTION: PARSING INVOKE-/#PRAGMA-LINE"的具体含义。虽然用户引用了两段看似无关的材料,但其实是在考察我是否能过滤无关引用、聚焦核心问题的能力。 用户提到的这个ACTION看起来像是编译器内部的调试信息标签,我在处理编译器前端代码时见过类似的结构。INVOKE通常指启动特定处理流程,PRAGMA-LINE则是预处理指令,所以组合起来应该是在描述编译器处理#pragma指令时的某个解析阶段。 需要特别注意两点:一是用户使用了全大写的专业术语,说明ta很可能是有编译原理背景的开发者;二是上次对话历史提到过C/C++编译错误分类,这次的问题正好延续了编译器相关主题。 关于#pragma指令,其实不同编译器的实现差异很大。GCC的#pragma处理机制就特别值得展开:它的解析分为词法分析、语义绑定、生成中间表示等阶段,而"PARSING INVOKE"可能对应着从识别pragma关键字到调用处理函数的过渡环节。不过考虑到用户没有指定编译器类型,我应该保持解释的通用性。 用户似乎很关注技术细节的实现逻辑,所以我会重点描述编译器内部的工作流程。但要注意避免过于深入后端优化细节,毕竟问题标签是"PARSING"。可以举例说明比如#pragma pack如何影响内存对齐的解析过程,这样既专业又直观。 </think> 关于编译器处理 `#pragma` 指令的解析流程(`ACTION: PARSING INVOKE-/#PRAGMA-LINE`),以下是技术细节的解析: --- ### **核心概念解析** 1. **`#pragma` 指令的本质** 是编译器的**非标准预处理指令**,用于向编译器传递特定于厂商的实现指令或扩展功能。其语法为: ```c #pragma directive_name [arguments] ``` 例如 `#pragma once`(防重复包含)或 `#pragma pack(1)`(内存对齐控制)。 2. **`ACTION: PARSING INVOKE-/#PRAGMA-LINE` 的含义** 此标签描述了编译器在**词法分析/语法分析阶段**对 `#pragma` 行的处理流程: - **PARSING**:编译器正在解析源代码文本。 - **INVOKE**:触发对 `#pragma` 的专用处理逻辑。 - **/#PRAGMA-LINE**:明确指向以 `#pragma` 开头的代码行。 --- ### **编译器的处理流程** 1. **词法分析阶段** 当预处理器遇到 `#pragma` 时,会将其标记为**特殊指令**而非普通代码,并传递至编译器前端。 2. **语法分析阶段** - 编译器识别 `#pragma` 后,根据指令名称(如 `pack`, `omp`)**调用对应的处理函数**。 - 若指令非法(如 `#pragma invalid_directive`),生成**警告或错误**(参考引用[2]中的错误分类[^2])。 3. **语义处理阶段** 根据指令修改编译状态: - **示例 1**:`#pragma pack(1)` → 修改后续结构体的内存对齐规则。 - **示例 2**:`#pragma omp parallel` → 启用 OpenMP 并行代码生成。 --- ### **技术实现要点** - **厂商依赖性** 不同编译器(GCC/MSVC/Clang)支持不同的 `#pragma` 指令集。例如: - MSVC 专用:`#pragma comment(lib, "mylib.lib")` - GCC 专用:`#pragma GCC optimize("O3")` - **错误处理机制** - **致命错误**:指令语法错误(如缺少参数)→ 终止编译[^2]。 - **警告**:未知指令或参数越界 → 继续编译但输出警告[^2]。 - **与 `Parallel.Invoke` 的关联** 引用[1]中的 `Parallel.Invoke` 是代码运行时行为,而 `#pragma` 是编译期指令。但某些 `#pragma`(如 OpenMP)可生成类似 `Parallel.Invoke` 的并行代码模板[^1]。 --- ### **典型应用场景** 1. **硬件适配** ```c #pragma GCC target("avx2") // 启用 AVX2 指令集 ``` 2. **内存优化** ```c #pragma pack(push, 1) // 1字节对齐 struct SensorData { ... }; #pragma pack(pop) ``` 3. **并行计算** ```c #pragma omp parallel for // 自动并行化循环 for (int i=0; i<10000; i++) { ... } ``` --- ### **相关问题** 1. 如何为自定义编译器扩展新的 `#pragma` 指令? 2. `#pragma` 与 `__attribute__((...))` 在 GCC 中有何区别? 3. 在跨平台项目中如何安全地使用编译器特定的 `#pragma`? [^1]: 编译器可能将 `#pragma omp` 转换为类似 `Parallel.Invoke` 的并行执行逻辑。 [^2]: 未知 `#pragma` 通常触发警告而非致命错误,除非语法结构非法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值