我有一个以这个开头的C头文件:
#if PRAGMA_ONCE
#pragma once
#endif
#ifdef __cplusplus
extern "C" {
#endif
#if PRAGMA_IMPORT
#pragma import on
#endif
#if PRAGMA_STRUCT_ALIGN
#pragma options align=mac68k
#elif PRAGMA_STRUCT_PACKPUSH
#pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
#pragma pack(2)
我很好奇#pragma import
正在做什么。有一个#pragma import
on ARM和on AIX,但#pragma import on
似乎无论如何都不会起作用。
有趣的是,搜索"pragma import on" -ada找到an extremely similar MIT boilerplate header file(以及包含类似代码的一堆其他文件),因此可能会指出这一点(尽管我怀疑它在文件中是否重要)我有)。
那么,是否有一些古老的编译器#pragma import on
做了什么?我怀疑知道这一点有什么实际意义,但我很好奇。
答案 0 :(得分:3)
This header似乎表明该编译指示被Apple Computer,Inc。中名为 MrC [pp]编译器的东西使用,我并不熟悉。
维基百科的Macintosh Programmer's Workshop链接到Archive.org以获取有关该文档的一些文档,您可以从那里到达MrC/MrCpp Related Documentation,并链接到MrC的pragma的PDF。
以下是该特定编译指示的定义:
语法
#pragma import on
#pragma import off
#pragma import reset
#pragma import [list] <name_list>
语义
import pragma表示将符号视为从另一个片段导入的符号。这会影响对变量和函数的引用的代码生成。导入的变量是间接解决的。使用交叉片段“glue”调用导入的函数。这包括在同一源文件中的调用(因此包括递归调用)。
共享库的开发人员应该为外部客户端和他们自己的内部构建使用相同的头文件。他们应该在此标头中使用import pragma。客户显然需要对这些符号进行处理,因为如果要进行更新/可修改,则内部构建需要将它们视为导入。请注意,这表示库导出应在公共标头中标记为import。这与客户的观点一致。
导入编译指示永远不会应用于文件范围的符号,即使用关键字“static”的符号。在列表表单中指定这样的符号将被编译指示报告为错误。
导入和导出编译指示是正交的,可以单独应用。
- 导入和内部编译指示是互斥的。如果已设置,导入pragma将禁用内部状态。
醇>