该文件指出: 函数f上的{ – #INLINABLE f# – } pragma具有以下行为: 虽然INLINE说“请把我列入”,但是INLINABLE说:“随意联系我,使用你的自由裁量权”。 换句话说,select留给GHC,它使用与无杂注函数相同的规则。 与INLINE不同,该决定是在呼叫站点进行的,因此将受到内联阈值,优化级别等的影响。 像INLINE一样,INLINABLE pragma保留了原始RHS的内联目的,并将其保存在接口文件中,而不pipeRHS的大小如何。 使用INLINABLE的一种方法是与内联的特殊function(第7.18节“特殊内置function”)结合使用。 内联调用f很难内联f。 为了确保f可以内联,将f的定义标记为INLINABLE是一个好主意,这样GHC就可以保证揭示一个展开,而不pipe它有多大。 此外,通过将f注释为INLINABLE,可以确保f的原始RHS是内联的,而不是任何随机优化的GHC优化器生成的版本。 INLINABLE pragma也适用于SPECIALIZE:如果将函数f标记为INLINABLE,那么随后可以在另一个模块中进行SPECIALIZE(请参见第7.16.8节“SPECIALIZE pragma”)。 与INLINE不同的是,在recursion函数中使用INLINABLE编译指示是可以的。 这样做的主要原因是为了让以后使用SPECIALIZE 它有什么缺点? 它是否使界面文件更大,更大? 它会使编译速度变慢吗? 有什么理由不应该在我写的每个导出的函数上放置一个INLINABLE编译指示? 有没有什么原因GHC不会在我写的每个导出的函数上放置一个INLINABLE编译指示?
似乎有一个名为parent的新的编译指南,做base大致相同的事情。 parent做了什么来保证一个新的(非核心)模块? 我错过了什么?
有没有其他的方式来embeddedmacros语句与其他语句的编译指示语句? 我正在试图达到像这样的东西: #define DEFINE_DELETE_OBJECT(type) \ void delete_ ## type_(int handle); \ void delete_ ## type(int handle); \ #pragma weak delete_ ## type_ = delete_ ## type 如果存在的话,我可以使用boost解决scheme(除波)。
所以我知道什么是编译指令,它是用来做什么的,但是这个词本身的含义是什么? 我已经在代码中多次使用它,但是我从来不知道这个词实际上代表或代表什么。
C语言中#pragma一些用法,用什么例子?
Xcode中#pragma标记的目的是什么? 他们在.m文件中的位置是否重要? 应该有一些#pragma在所有其他人之前? 他们必须在场吗? 可以添加新标记吗? 他们为什么会呢? 是什么造成的? 删除标记是否有害? 会有人想要吗?
偶尔很难编写不会发出警告的C ++代码。 但启用警告不失为一个好主意。 所以通常需要禁用某些特定构造的警告,并使其在所有其他代码段中启用。 到目前为止,我已经看到了两种方法。 第一个是使用#pragma warning( push )和#pragma warning( pop ) : #pragma warning( push ) #pragma warning( disable: ThatWarning ) //code with ThatWarning here #pragma warning( pop ) 第二个是使用#pragma warning( default ) : #pragma warning( disable: ThatWarning ) //code with ThatWarning here #pragma warning( default: ThatWarning ) 我在第二个版本中看到的问题是,它放弃了最初的警告级别 – 在此之前警告可能已经closures,或者它的警告级别可能已经被改变。 使用default会放弃这些改变。 第一种方法看起来很干净。 有没有问题呢? […]
有没有办法使用Visual Studio在cpp文件中禁用单个警告行? 例如,如果我捕捉到一个exception,而不处理它,我得到错误4101(未引用的本地variables)。 有没有办法忽略这个function,但否则在编译单元报告呢? 目前,我把#pragma warning (disable : 4101)放在文件的顶部,但显然只是closures整个单元。
在Visual C ++中,可以使用#pragma warning (disable: …) 。 另外我发现在GCC中你可以覆盖每个文件的编译器标志 。 我怎样才能做到这一点“下一行”,或使用GCC代码周围的推/ pop语义?