我很确定这不是重复的.你用#pragma mark吗?我见过多种方式,这是正确的吗?
#pragma mark -
#pragma mark === Actions ===
#pragma mark -
#pragma mark -
#pragma mark === Actions ===
#pragma mark - === Actions ===
#pragma mark Actions
Run Code Online (Sandbox Code Playgroud)
你这样做的方式是什么?你怎么建议把它分开?您通常将您的部分命名为什么,例如视图控制器?
我从来没有理解#pragma once
什么时候#ifndef #define #endif
总是有效的需要.
我已经看到了#pragma comment
与其他文件链接的用法,但使用IDE可以更轻松地设置编译器设置.
有哪些其他用法#pragma
是有用的,但并不广为人知?
编辑:
我不只是#pragma指令列表之后.也许我应该再多说一下这个问题:
你和你一起写的代码#pragma
有用吗?
.
答案一目了然:
感谢所有回答和/或评论的人.以下是我发现有用的一些输入的摘要:
#pragma once
或#ifndef #define #endif
允许更快地编译大型系统.史蒂夫跳进来支持这一点.#pragma once
MSVC首选,而GCC编译器优化#ifndef #define #endif
.因此,应该使用其中之一,而不是两者.#pragma pack
了二进制兼容性,而Clifford则反对这一点,因为可移植性和字节序可能存在问题.Evan提供了一个示例代码,Dennis告知大多数编译器会强制执行填充以进行对齐.#pragma warning
用来隔离真正的问题,并禁用已经审查过的警告.#pragma comment(lib, header)
在不重新设置IDE的情况下轻松移植项目.当然,这不太便携.#pragma message
为VC用户提供了一个很好的技巧来输出带有行号信息的消息.詹姆斯更进一步,允许error
或warning
匹配MSVC的消息,并将适当显示,如错误列表.#pragma region
了能够在MSVC中使用自定义消息折叠代码.哇,等等,如果我想发布不使用#pragmas除非必要,该怎么办?
#pragma
.荣誉.如果SOers感觉到发布答案的冲动,我会在此列表中添加更多内容.感谢大家!
我包含来自第三方库的文件,该文件引发了一个错误,可以将其降级为警告-fpermissive
.但是因为我不想用这些警告"污染"我的编译日志,所以我想完全禁用这些消息.
到目前为止,我在包含文件时-fpermissive
使用诊断编译指示设置选项; 就像是:
#pragma GCC diagnostic push
#pragma GCC diagnostic warning "-fpermissive"
#include <third-party-file.h>
#pragma GCC diagnostic pop
Run Code Online (Sandbox Code Playgroud)
由于gcc通常提供-f
标志的"正面"和"负面"版本,我想忽略了"不允许"的功能:
#pragma GCC diagnostic ignored "-fno-permissive"
#include <third-party-file.h>
Run Code Online (Sandbox Code Playgroud)
但似乎没有-fpermissive
标志的"负面"版本(我正在使用gcc 4.6.3;但即使版本4.7.0 也没有它).
我有机会模仿这种行为吗?谢谢!
在Xcode版本4.0中,我注意到方法中的#pragma标记不再显示在跳转栏中.唯一显示的#pragma标记是方法之间的标记.
我正在使用这些#pragma标记,以便快速组织和获取显示在我的tableviews的不同部分中的信息,我真的想要恢复该功能.
有谁知道如何让他们再次出现?
我试图忽略来自某些第三方头文件的警告,如下所示:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunknown-pragmas"
#pragma GCC diagnostic ignored "-Wreorder"
#include <some_3rd_party_header.h>
#pragma GCC diagnostic pop
Run Code Online (Sandbox Code Playgroud)
这种方法似乎总体上起作用,但不适用于未知的pragma警告(我仍然得到它们).
为什么它适用于其他警告但不适用于此警告?谁能证实这种行为?
我使用的是G ++(版本4.7.1)与-Wall
和-std=c++0x
Debian的下.
我#pragma mark
用于在某些类别下对我的方法进行分组.但问题是Xcode 4
我的第一类是不显示.
我的代码看起来像:
@interface MyClass : NSObject
#pragma mark -
#pragma mark Category 1
//Some method declaration
#pragma mark -
#pragma mark Category 2
//Some method declaration
#pragma mark -
#pragma mark Category 3
//Some method declaration
@end
Run Code Online (Sandbox Code Playgroud)
但是当我检查Xcode
它时它只显示类别2和类别3.类别1没有列在那里,请检查图像
我的代码中是否有任何问题或者是否存在错误XCode
?
pragma指令的范围是什么?例如,如果我#pragma warning(disable: 4996)
在一个包含在不同文件B中的头文件A中说,那么是否也会禁用B内的所有警告?或者我应该再次在文件A的末尾启用警告?
我知道#pragma clang diagnostics可以用来忽略clang生成的一些警告.但我不知道如何正确使用它.
例如,对于未使用的变量警告,我们可以避免警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
int number;
#pragma clang diagnostic pop
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何为#pragma clang诊断忽略得到正确的参数(这里是"-Wunused-variable")
有没有办法用xcode为特定警告提供这种警告名称?
我正在使用OpenCV库,并且"warning C4793: 'anonymous namespace'::CV_XADD' : function compiled as native"
如果我的C++项目是使用CLR支持编译的,则会生成其中一个头文件cxoperations.hpp .我可以通过包围这样的OpenCV标头来阻止警告:
#pragma managed(push,off)
#include <cv.h>
#pragma managed(pop)
Run Code Online (Sandbox Code Playgroud)
但实际使用OpenCV的项目不是使用CLR支持编译的,它是一个本机C++静态库.具有CLR支持并且在没有pragma语句的情况下生成此警告的项目只使用此静态库.所以我有点惊讶的是,根本没有创建警告,特别是考虑到整个静态库没有使用CLR支持进行编译,但只有这一个标题会导致问题.
因此,这个解决方案对我来说似乎不太理想.这是你如何处理这个警告,还是你可以推荐一个更好的做法?
我想添加一些宏来缓解(un)在我们内部弃用的例程周围设置一个特定的警告.
我想转此:
#pragma clang diagnostic push
#pragma clang diagnostic warning "-Wdeprecated-declarations"
void Foo() __attribute__((deprecated("Warning: deprecated routine")))
#pragma clang diagnostic pop
Run Code Online (Sandbox Code Playgroud)
进入这个:
MY_DEPRECATED_BEGIN
void Foo() MY_DEPRECATED
MY_DEPRECATED_END
Run Code Online (Sandbox Code Playgroud)
该MY_DEPRECATED_BEGIN
宏给我的麻烦,我必须指定2个在一个宏编译指示.可以这样做吗?
(仅使用MY_DEPRECATED宏实现相同效果的解决方案的奖励积分!)