#pragma objective-c:除了'mark',你还能有更多的选择吗?

8

我熟悉#pragma mark在Objective-C/Xcode/iOS开发中的应用,它有助于找到代码的不同部分。

但是,我想知道除了'mark'之外是否还有其他关键字可以使用。比如说,能否使用#pragma somethingelse?谢谢!


如果有人进来发布了500个未记录的关键字并且它们都能正常工作,那将会很有趣 :) - Jens Bergvall
您可以使用以下方式:// FIXME:需要修复的内容// TODO:需要处理的事项 #pragma once - Popeye
是的,还有其他的,比如 #pragma clang diagnostic ... - Wain
我已经给出了使用#pragma clang diagnostic ignored的答案,这对于https://dev59.com/NmYq5IYBdhLWcg3wfgrd#14444603非常有用。 - Popeye
2个回答

7

首先,一些示例:

  1. 您可以控制诊断:

    http://clang.llvm.org/docs/UsersManual.html#controlling-diagnostics-via-pragmas

  2. 来自同一链接:

    • clang支持Microsoft的 "#pragma pack" 功能,用于控制记录布局。GCC也包含此功能的支持,但是在MSVC和GCC不兼容的情况下,clang遵循MSVC定义。

    • clang支持Microsoft的 #pragma comment(lib, "foo.lib") 功能,用于自动链接指定库。目前,此功能仅适用于Visual C++链接器。

    • clang支持Microsoft的 #pragma comment(linker, "/flag:foo") 功能,用于向COFF对象文件添加链接器标志。用户负责确保链接器理解这些标志。

    该列表中的第二个和第三个不适用于您的iOS代码。

  3. 维基百科 [链接] 表示,clang也支持 #pragma once

最后,这是一个链接到 clang API文档,用于处理pragma代码。您可以从那里浏览以查看其他所有内容。特别是,TokenKinds.def描述了所有接受的标记,因此可能是完整的:

#pragma unused
#pragma GCC visibility [push/pop]
#pragma pack [value/show/push/pop/etc/etc/etc]
#pragma clang __debug parser_crash
#pragma clang __debug captured
#pragma ms_struct [on/off]
#pragma align [native/natural/mac68k/power/reset]
#pragma weak [identifier]
#pragma weak [identifier = identifier] // alias
#pragma redefine_extname [identifier identifier]
#pragma STDC FP_CONTRACT
#pragma OPENCL EXTENSION
#pragma omp [...]
#pragma detect_mismatch
#pragma comment

解析代码位于ParsePragma.cpp中,似乎表明并非所有的都已经实现,即使前端接受了它们。


0

是的。它经常用于实现定义的指令,但有一些是在C中定义的。

6.10.6 Pragma指令语义1
1. 形如`# pragma pp-tokensopt new-line`的预处理指令,其中STDC预处理标记不紧跟在指令中的pragma之后(在任何宏替换之前),会导致实现以实现定义的方式运行。该行为可能会导致翻译失败或导致翻译器或生成的程序表现出不符合规范的行为。任何未被实现识别的这种pragma都将被忽略。
2. 如果预处理标记STDC紧跟在指令中的pragma之后(在任何宏替换之前),则不对指令执行宏替换,并且指令应具有以下形式,其含义在其他地方描述:
- `#pragma STDC FP_CONTRACT on-off-switch` - `#pragma STDC FENV_ACCESS on-off-switch` - `#pragma STDC CX_LIMITED_RANGE on-off-switch`
其中,`on-off-switch`是`ON OFF DEFAULT`之一。

Carl Norum的回答很好地涵盖了实现定义指令的示例。要获取完整列表,您应该参考编译器的文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接