标签: pragma

为什么不自动假设#pragma?

告诉编译器只包含一次文件有什么意义?默认情况下它不会有意义吗?是否有任何理由多次包含单个文件?为什么不假设呢?是与特定硬件有关吗?

c c++ pragma

75
推荐指数
6
解决办法
6039
查看次数

74
推荐指数
3
解决办法
5万
查看次数

是否正确使用#pragma warning push/pop来暂时改变警告级别?

偶尔编写一下根本不会发出警告的C++代码是很困难的.然而,启用警告是一个好主意.因此,通常需要禁用某些特定构造周围的警告,并在所有其他代码段中启用它们.

到目前为止,我已经看到了两种方法.

第一个是使用#pragma warning( push )#pragma warning( pop ):

 #pragma warning( push )
 #pragma warning( disable: ThatWarning )
 //code with ThatWarning here
 #pragma warning( pop )
Run Code Online (Sandbox Code Playgroud)

第二是使用#pragma warning( default ):

 #pragma warning( disable: ThatWarning )
 //code with ThatWarning here
 #pragma warning( default: ThatWarning )
Run Code Online (Sandbox Code Playgroud)

我在第二个变体中看到的问题是它丢弃了原始警告级别 - 警告可能在此之前已关闭或警告级别可能已被更改.使用default会丢弃这些改动.

第一种方法看起来很干净.它有什么问题吗?有没有更好的方法来实现同样的目标?

c++ warnings pragma compiler-warnings visual-c++

70
推荐指数
4
解决办法
5万
查看次数

为什么C/C++的"#pragma once"不是ISO标准?

我目前正在开展一个大型项目并且维护所有这些包括警卫让我疯狂!手工编写是令人沮丧的浪费时间.虽然许多编辑可以生成包含警卫,但这并没有多大帮助:

  1. 编辑器根据文件名生成保护符号.如果在不同目录中具有相同文件名的标头,则会出现此问题.他们两个都会得到相同的包括后卫.将目录结构包含在保护符号中需要编辑器的一些奇特的方法,因为宏中的斜杠和反斜杠不是最好的.

  2. 当我必须重命名文件时,我应该重命名所有包含警戒(在ifndef中,定义和理想的endif的注释).烦人.

  3. 预处理器充斥着大量的符号,而不知道它们的含义.

  4. 然而,定义包含一次,编译器每次遇到标题包含时仍会打开标题.

  5. 包含防护不适合命名空间或模板.实际上他们正在颠覆命名空间!

  6. 你的守卫符号有可能不是唯一的.

当程序在单个目录中包含少于1000个标头时,它们可能是可接受的解决方案.但是现在呢?它很古老,与现代编码习惯无关.令我困扰的是,这个问题几乎可以通过#pragma once指令完全解决.为什么不是标准?

c c++ pragma include-guards

50
推荐指数
4
解决办法
7900
查看次数

Perl 5中父级和基础有什么区别?

似乎有一个新的pragma命名parent与大致相同的东西base.这样parent做可以保证一个新的(非核心)模块?我错过了什么?

perl subclass pragma

48
推荐指数
2
解决办法
1万
查看次数

如何禁用#pragma警告?

在开发C++应用程序时,我不得不使用第三方库,它产生了大量与正在使用的无害#pragma指令相关的警告.

../File.hpp:1: warning: ignoring #pragma ident
In file included from ../File2.hpp:47,
                 from ../File3.hpp:57,
                 from File4.h:49,
Run Code Online (Sandbox Code Playgroud)

使用GNU C++编译器时是否可以禁用此类警告?

c++ compiler-construction warnings pragma

47
推荐指数
5
解决办法
7万
查看次数

告诉gcc专门展开一个循环

如何告诉GCC展开特定的循环?我使用过CUDA SDK,可以使用手动展开循环#pragma unroll.gcc有类似的功能吗?我用谷歌搜索了一下但找不到任何东西.

c gcc pragma unroll

47
推荐指数
2
解决办法
3万
查看次数

是否有任何理由不使用INLINABLE pragma作为函数?

文件规定:

函数f上的{ - #INLINABLE f# - } pragma具有以下行为:

  • 虽然INLINE说"请内联我",INLINABLE说"请随意内联我;请自行决定".换句话说,选择留给GHC,它使用与无编译指示函数相同的规则.与INLINE不同,该决定是在呼叫站点进行的,因此会受到内联阈值,优化级别等因素的影响.

  • 与INLINE类似,INLINABLE pragma保留原始RHS的副本以用于内联,并且无论RHS的大小如何,都将其保留在接口文件中.

  • 使用INLINABLE的一种方法是结合内联特殊函数(第7.18节"特殊内置函数").调用内联f非常难以内联f.为了确保f可以内联,最好将f的定义标记为INLINABLE,以便GHC保证在不管它有多大的情况下展开展开.此外,通过将f注释为INLINABLE,可以确保f的原始RHS内联,而不是f GHC优化器产生的任何随机优化版本.

  • INLINABLE pragma也适用于SPECIALIZE:如果将函数f标记为INLINABLE,那么随后可以在另一个模块中进行SPECIALIZE(参见第7.16.8节"SPECIALIZE pragma").

  • 与INLINE不同,可以在递归函数上使用INLINABLE编译指示.主要原因是允许以后使用SPECIALIZE

它的缺点是什么?

它是否使界面文件更大,更大?它是否使编译速度慢得多?

有没有理由我不应该在我写的每个导出函数上放置一个INLINABLE pragma?是否有任何理由GHC没有在我写的每个导出函数上放置一个INLINABLE pragma?

haskell inline pragma ghc

44
推荐指数
1
解决办法
1971
查看次数

C#:是否需要pragma警告恢复?

msdn我得到这个:

#pragma warning disable warning-list
#pragma warning restore warning-list
Run Code Online (Sandbox Code Playgroud)

在示例中,使用了disablerestore.restore如果我想要为整个文件禁用它,是否有必要?

就像,如果我不恢复,它携带多远?之后编译的所有内容都禁用警告吗?或者仅仅是该文件的其余部分?还是被忽略了?

c# pragma compiler-warnings

43
推荐指数
1
解决办法
7570
查看次数

python中的Pragma

我正在阅读bottle.py源代码.它是一个Web框架,只有3000多行python代码.非常酷.

我发现了一些这样的代码:

class ServerAdapter(object):
    quiet = False
    def __init__(self, host='127.0.0.1', port=8080, **config):
        self.options = config
        self.host = host
        self.port = int(port)

    def run(self, handler): # pragma: no cover
        pass
    ... 
Run Code Online (Sandbox Code Playgroud)

什么# pragma: no cover意思?我找不到有关pragmapython文档中语法的任何介绍.

python pragma

41
推荐指数
2
解决办法
1万
查看次数