#pragma警告禁用代码列表及其含义
禁用警告的语法如下: #pragma warning disable 414, 3021 或更一般地表示: #pragma warning disable [CSV list of numeric codes] 是否有这些数字代码的列表以及警告他们在抑制的警告的描述?我的烦恼很大,我似乎无法通过Google找到它. 解决方案 您不需要列表.编译器会告诉您.如果收到"警告CS0168"的编译器错误,请在列表中添加168(或者更好,请修复代码). 其他解决方案 MSDN有一个警告代码的列表.不幸的是,您必须单击每个链接才能查看代码的实际含义. 其他解决方案 向下看 c#编译器错误和警告列表找到单个警告号码.
0 2024-04-14
编程技术问答社区
#pragma warning disable & restore
我使用C#创建了第一个项目. 我有很多警告错误,所有这些警告错误都是单个错误(内部编译器错误.有关更多信息,请参见控制台日志.) 为了减少警告错误,我使用了#pragma警告禁用. #pragma警告还原 问题代码的前后. 我怀疑在我的最后一个构建中,我是否应该像程序中的那样留下#pragma警告禁用和恢复.还是我需要删除它?例如: #pragma warning disable if (Displayer.instance != null && CTR.Tore== "Keepit") { Displayer.instance.SetFielderProfile (i); } #pragma warning restore 对于最终构建,我是否需要删除它? 解决方案 至少您应该具体说明您故意选择要忽略哪些警告.这样,如果以后的维护引入了您应该知道的"新"警告/问题,则您的毯子Pragma警告Disable Diviesivie不会抑制有关新引入错误
0 2024-04-13
编程技术问答社区
C#: 是否需要pragma警告恢复?
来自 msdn 我明白了/p> #pragma warning disable warning-list #pragma warning restore warning-list 在示例中,都使用了disable和restore.如果我要为整个文件禁用它,是否有必要restore? 喜欢,如果我不恢复,它携带了多远?此后汇编的所有内容是否禁用了警告?还是仅用于该文件的其余部分?还是被忽略? 解决方案 如果您不恢复文件的其余部分处于活动状态. 有趣的是,这种行为是不是在语言规范. (请参阅第9.5.8节)但是,有条件编译符号的9.5.1节确实表明了此"直到文件行为结束" 符号一直定义直到 #UNDEF指令已处理相同符号,或直到结束 到达源文件. 鉴于"预处理器"实际上是词汇分析阶段的一部分基于源文件汇编顺序的非确定性) 其他解决方案 否,您会发现编译器完成解析源文件后,该编译器将自动恢复任何禁用的警告. #pragma warning d
0 2024-04-12
编程技术问答社区
并行for-loop外的私有变量
我想知道每个线程在for循环中使用了多少时间.我希望Time_taken为每个线程私有,以便他们可以在那里附加自己的时间.最好的演员我想要每个线程的总时间,而不是while-loop中的每次迭代的时间. double time_taken = 0.0; while(delta >= epsilon) { delta = 0.0; double wtime = omp_get_wtime(); #pragma omp parallel for reduction(+:delta) for (i = 0; i
2 2024-04-09
编程技术问答社区
关于在Visual Studio中使用#pragma region折叠代码块的问题
在VisualStudio中,当您编写一个功能时,它可能会崩溃为轮廓,每个人都知道.另外,您可以使用#pragma region和#pragma endregion手动指定代码区域,以使其崩溃.但是,我发现一个问题,如果#pragma region内的任何崩溃的代码块,它们将无法崩溃.有什么方法可以解决吗? 解决方案 还有其他几种更好,更好,灵活的方法,#pragma region您可以在VS中折叠代码: 方法1:使用{...},而不是本身支持代码在vs中崩溃的代码. 启用选项:Tools->Text Editor->C/C++->Formatting->OutLine Statement Blocks->True. 将您的范围放入不同的范围{...},然后将代码折叠在不同的范围中: 方法2:使用键盘快捷键折叠代码: ctrl + m + o 将崩溃. ctrl + m + l 将展开全部. ctrl + m + p 将展开全部并禁用概述
0 2024-04-09
编程技术问答社区
在#define中使用openmp pragma
可能的重复: c/c/c ++ pragma in Dewine Macro 条件" pragma oump" 如何在宏定义中使用openMP pragmas?例如 #define A() { \ ...a lot of code... \ #pragma omp for \ for(..) \ ..do_for.. \ ...another a lot of code \ } 解决方案 在此处回答条件" pragma" P> c99具有_Pragma关键字,它允许您在宏内放置原本#pragma的关键字.像 #define OMP_PARA_INTERNAL _Pragma("omp parallel for") so, #define OMP_PARA_FOR _Pragma("omp for") #define A() { \ ...a lot of code... \
0 2024-04-09
编程技术问答社区
像#include这样的预处理器指令能否只放在程序代码的顶部?
我已经使用了#pragma指令内部功能而没有错误或警告(尤其是#pragma pack()).但是以下代码显示了警告incompatible implicit declaration of built-in function 'printf'|: int main(void) { printf("Trial"); } #include 此外,这是我拥有的一本书的摘录.作者对这样的评论很糟糕,尤其是因为他慷慨地使用void main(),但我仍然觉得作者没有任何作者可以是 不好无缘无故地要求以下要求: 这些预处理器指令中的每一个都以#开头 象征.指令可以放置在程序中的任何地方,但是 最常被放置在程序的开头 第一个功能定义. 那么,您能告诉我是否必须在程序顶部使用一些预处理器指令,例如#include,而其他类似#pragma则可以在程序中使用? edit ouah 的言论我尝试了以下内容,但没有发出警告,它给出了很大的错误 .lol.
0 2024-04-08
编程技术问答社区
带有#pragma optimize的代码的可移植性如何?
使用 #pragma optimize ?大多数编译器是否支持它,对此#pragma的支持有多完整? 解决方案 #pragma是批准和便携式编译器添加未批准和非允许语言语言扩展的方法* . 基本上,您永远不确定,至少一个主要的C ++编译器(G ++)不支持此Pragma. *: 来自C ++标准(N3242): 16.6 Pragma Directive [cpp.pragma] 形式的预处理指令 # pragma pp-tokens opt new-line 导致实施以实施定义的方式行事.该行为可能导致翻译失败或导致翻译人员或结果程序以不合格的方式行事.任何未经实施所识别的巴格马都将被忽略. 来自C标准(委员会草案 - 2011年4月12日): 6.10.6 Pragma指令 语义 形式的预处理指令 # pragma pp-tokens opt new-line ,预处理令牌STDC在STDC中不会
0 2024-04-08
编程技术问答社区
#pragma指令编译器是否依赖?
我知道,并且之前已经使用了#pragma startup和#pragma exit,但是当我执行以下代码时,它仅输出In main.谁能告诉我这里发生了什么? #include #pragma startup A 110 #pragma startup B #pragma exit A #pragma exit B 110 int main() { printf("\nIn main"); return 0; } void A() { printf("\nIn A"); } void B() { printf("\nIn B"); } 还是编译器依赖?我正在使用GCC编译器. 解决方案 所有#pragma指令依赖编译器,并且编译器 必须忽略它不识别的任何 iso-9899:2011,s6.10.6:"任何此类pragma该实施未能忽略这一点.").这就是为什么您的程序成功编译的原因. 功能A和B未调用,因为.
10 2024-04-08
编程技术问答社区
我如何实现一个为_Pragma创建引号字符串的宏?
我想拥有这样调用的宏: GCC_WARNING(-Wuninitialized) 将其扩展到这样的代码: _Pragma("GCC diagnostic ignored \"-Wuninitialized\"") 我没有运气,因为预处理器加入和串扰的通常技巧似乎不适用,或者我不知道如何在这里应用它们. 解决方案 在预处理魔法的小帮助下: #define HELPER0(x) #x #define HELPER1(x) HELPER0(GCC diagnostic ignored x) #define HELPER2(y) HELPER1(#y) #define GCC_WARNING(x) _Pragma(HELPER2(x)) GCC_WARNING(-Wuninitialized) 其他解决方案 如果将宏参数包含在单个引号中,也可以接受吗?如果是这样,您可以使用此信息: #define GCC_WARNING(x) _Pragma("G
0 2024-04-08
编程技术问答社区
C语言中的 "#pragma section <XYZ>"有什么用?
"#pragma section "在C? 中的用途是什么 我遇到了使用以下类型的C代码文件: - #define XYZ "ITEM 26.G03" #pragma section 其中xyz是:#define XYZ "ITEM 26.G03" 我需要关于"#pragma section" 使用的一些解释 解决方案 #pragma指令是实施特定指令,它是向编译器提供其他信息的标准方法.该指令具有以下形式: #pragma name 如果预处理器识别指定的"名称",则执行其代表的任何操作,或将信息传递给编译器.如果C实施不支持"名称" 它被忽略. 例如, GCC编译器接受列出的布拉格斯列表在这里. 对于#pragma section, gcc 的文档说: 部分(" section-name")通常,编译器将代码放置 在文本部分中生成.但是,有时您需要其他 部分,或者您需要某些特定功能才能出现 特殊部分.该部分
0 2024-04-08
编程技术问答社区
可替代#pragma once的便携式替代方案
有人可以告诉我#pragma once各种编译器的指令支持吗? 我想在我的标题中使用类似: #if _MSC_VER > ... || __GNUC__ > ... || ... #pragma once #endif 也许它已经存在于Boost源或您的代码中? 解决方案 使用包括后卫: #ifndef MY_HEADER_H #define MY_HEADER_H // ... #endif // MY_HEADER_H 有时您会看到这些结合使用#pragma once: #pragma once #ifndef MY_HEADER_H #define MY_HEADER_H // ... #endif // MY_HEADER_H #pragma once很漂亮广泛支持. 其他解决方案 #pragma once是包括警卫的非标准替代方案: #ifndef HEADER_H #define HEADER
0 2024-04-08
编程技术问答社区
在linux上使用gcc编译器的#pragma init和#pragma fini
我想构建一些代码,这些代码在共享库的加载时调用一些代码.我以为我会这样做: #pragma init(my_init) static void my_init () { //do-something } int add (int a,int b) { return a+b; } 所以当我用 构建该代码时 gcc -fpic -g -c -c -wall tt.c 它返回 gcc -fPIC -g -c -Wall tt.c tt.c:2: warning: ignoring #pragma init tt.c:4: warning: ‘my_init’ defined but not used 所以它忽略了我的#pragmas.我在实际代码中尝试了此操作,并且我的代码中止了,因为在Pragma部分没有调用一个函数,因为它被忽略了. 如何获得GCC使用这些#pragma Init和Fini语句? 解决方案 布拉格斯几
0 2024-04-08
编程技术问答社区
谁能告诉我pragma语句的用途?
任何人都可以告诉我在C和ADA中使用Pragma,如果可能 解决方案 C99中有三个标准布拉格斯: #pragma STDC FP_CONTRACT on-off-switch #pragma STDC FENV_ACCESS on-off-switch #pragma STDC CX_LIMITED_RANGE on-off-switch 'on-of-switch'是其中之一 on,off,默认. 这些可以在编译时使用这些,以以奥术方式修改编译器的行为(这些与C99浮点行为有关).标准储备为标准布拉格马斯的STDC;其他人可以使用他们喜欢的其他任何东西. 也有非标准的布拉格马斯 - 正如塞缪尔·克拉奇科(Samuel Klatchko)指出的那样. 基本上,它们是使编译器以半标准化方式进行非标准的事情的一种方式.一个示例是'#pragma pack',这意味着结构是在成员之间没有填充而没有填充的,即使这意味着访问这些成员将是次优的(大概比时间更重要,大
4 2024-04-07
编程技术问答社区
为什么#pragma被认为是一个预处理器指令?
我知道它以#开头,然后遵循预处理指令格式 .但是,预处理器真的在乎吗? #pragma pack,#pragma once和我知道的所有其他指令都是由编译器进行的.在中发表评论. 所以我的问题是: 由于#pragma是针对编译器的,为什么它被视为预处理指令?仅仅是因为它以#? 开头 预处理器是否真的用#pragma? 做某事 解决方案 为什么#pragma被视为预处理器指令? 因为C标准这么说.它在章节预处理指令中指定,C17 6.10.6.除此之外,该标准对#pragma应该做的事情非常含糊,因为整个目的是做一些编译器特定的事情.或者,如果巴格马未识别 - 忽略它. 某个编译器如何在内部内部处理Pragma的内容. 一些布拉格斯显然需要进行预处理,尤其是启用/禁用某些编译器行为(例如#pragma warning ...等)等.知道如何编译代码. 预处理器真的用#pragma做某事吗? 是的,它在翻译阶段4中对其进行了评估:"执行预处
0 2024-04-07
编程技术问答社区
如何在_Pragma的参数中串联字符串?
_pragma的参数是一个字符串,因此我认为,当您以普通的c-preprocessor方式粘贴字符串(即将它们放在每个彼此旁边)时,您可以为_pragma的参数形成一个新的字符串.但是 _Pragma("GCC Poison " "puts") 错误 失败 error: _Pragma takes a parenthesized string literal 如何绕过它? 这个特定的示例不是很有用,并且具有使它们全部开始的微不足道的解决方案,但是最终目标是将宏串成 解决方案 DO_PRAGMA宏 gnu docs 定义像这样 #define DO_PRAGMA(x) _Pragma (#x) 使用此功能,如果您将两个单独的代币放在彼此旁边,它们将被串在一起.要在定义中扩展宏,它必须经过一个间接级别,因此将其定义为 #define DO_PRAGMA_(x) _Pragma (#x) #define DO_PRAGMA(x) DO_PRAGM
0 2024-04-07
编程技术问答社区
在C语言中禁用结构填充而不使用pragma
如何在不使用pragma的情况下禁用C中的结构填充? 解决方案 没有这样做的标准方式.标准指出,可以酌情执行填充.来自C99 6.7.2.1 Structure and union specifiers,第12段: 结构或联合对象的每个非现场成员都以适合其类型的实现方式对齐. 话虽如此,您可以尝试几件事. 您已经打折的第一个,使用#pragma尝试说服编译器不要打包.无论如何,这是不可移植的.也没有任何其他特定实施方式,但您应该检查它们,因为如果您确实需要此功能,则可能需要这样做. 第二是以最大至最小的顺序订购您的字段,例如所有long long类型,然后是long> long,然后所有int,short,最后是char类型.这通常会起作用,因为它通常是更较大的类型,具有更严格的对齐要求.同样,不是便携式. 第三,您可以将类型定义为char数组并施放地址以确保没有填充.但是请记住,如果变量不正确,有些架构将放慢脚步,而其他架构则会惨败(例如,提出公共
0 2024-04-07
编程技术问答社区
如何向GCC提示某一行在编译时应该是不可达的?
编译器通常提供当代码无可及.我还看到了一些库的宏,这些库提供了无法实现的代码的断言. 是否有提示,例如通过Pragma或我可以将其传递给GCC(或任何其他编译器)的提示,如果确定预期的一条线将在编译期间警告或错误实际上可以达到无法达到的? 这是一个示例: if (!conf->devpath) { conf->devpath = arg; return 0; } // pass other opts into fuse else { return 1; } UNREACHABLE_LINE(); 在预期无法达到无法达到的线上的条件变化后,该线实际上是可以达到的. 解决方案 GCC 4.5支持其他解决方案 __builtin_unreachable()在我在GCC 7.3.0 上看到的据我所见,不会生成任何编译时间警告 我在文档中都无法找到任何暗示它会的东西.
0 2024-04-07
编程技术问答社区
为什么#pragma once不是自动假定的?
告诉编译器专门仅包含文件一次有什么意义?默认情况下,这是否有意义?甚至有任何理由多次包含一个文件吗?为什么不假设呢?与特定硬件有关吗? 解决方案 这里有多个相关问题: 为什么#pragma once不自动执行? 因为在某些情况下您要多次包含文件. 为什么要多次包含文件? 其他答案中给出了几个原因(BOOST.PREPROCESER,X-MACROS,包括数据文件).我想添加一个"避免代码重复"的特定示例: openfoam 鼓励一种风格,其中#include #include在函数中的零件是一个常见的概念.例如,请参见 this 讨论. 好的,但是为什么不是选择退出的默认值? 因为它实际上不是由标准指定的. #pragma根据定义实现特定的扩展. 为什么#pragma once #pragma once尚未成为标准化功能(因为它得到了广泛支持)? 因为以平台 - 不平衡的方式固定"同一文件"实际上非常困难. 有关更多信息,请参见此答案. 其他
0 2024-04-06
编程技术问答社区