标签: c-preprocessor

#pragma pack效果

我想知道是否有人可以向我解释#pragma pack预处理器语句的作用,更重要的是,为什么人们会想要使用它.

我查看了MSDN页面,它提供了一些见解,但我希望能从有经验的人那里听到更多.我以前在代码中看过它,虽然我似乎无法找到它的位置.

c c-preprocessor pragma-pack

212
推荐指数
4
解决办法
19万
查看次数

我怎么看C/C++源文件在Visual Studio预处理后?

比方说,我有许多预处理指令源文件.是否有可能看到它的外观预处理器是用它做之后?

c c++ debugging visual-studio-2005 c-preprocessor

201
推荐指数
8
解决办法
9万
查看次数

#define宏用于C中的调试打印?

尝试创建一个宏,可以在定义DEBUG时用于打印调试消息,如下面的伪代码:

#define DEBUG 1
#define debug_print(args ...) if (DEBUG) fprintf(stderr, args)
Run Code Online (Sandbox Code Playgroud)

如何用宏实现这一目标?

c c-preprocessor

196
推荐指数
7
解决办法
18万
查看次数

如何制作可变参数宏(可变数量的参数)

我想在C中编写一个宏,它接受任意数量的参数,而不是特定的数字

例:

#define macro( X )  something_complicated( whatever( X ) )
Run Code Online (Sandbox Code Playgroud)

哪里X有任何数量的参数

我需要这个,因为它whatever是重载的,可以用2或4个参数调用.

我试过两次定义宏,但第二个定义覆盖了第一个!

我正在使用的编译器是g ++(更具体地说,mingw)

c g++ variadic c-preprocessor

182
推荐指数
5
解决办法
18万
查看次数

"文件末尾没有换行符"编译器警告

在某些C++编译器中出现以下警告的原因是什么?

文件末尾没有换行符

为什么我应该在源/头文件的末尾有一个空行?

c++ compiler-construction warnings c-preprocessor

180
推荐指数
6
解决办法
9万
查看次数

如何使用预处理程序指令检查OS?

我需要我的代码根据编译它的操作系统做不同的事情.我正在寻找这样的东西:

#ifdef OSisWindows
// do Windows-specific stuff
#else
// do Unix-specific stuff
#endif
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?有没有更好的方法来做同样的事情?

c operating-system conditional-compilation c-preprocessor

175
推荐指数
7
解决办法
13万
查看次数

C++宏什么时候有用?

ç预处理器有理由担心和C++社区避之唯恐不及.内联功能,功能和模板通常是更安全和更好的替代品#define.

以下宏:

#define SUCCEEDED(hr) ((HRESULT)(hr) >= 0)  
Run Code Online (Sandbox Code Playgroud)

绝不是优于安全类型:

inline bool succeeded(int hr) { return hr >= 0; }
Run Code Online (Sandbox Code Playgroud)

但宏确实有它们的位置,请列出您为宏找到的用途,如果没有预处理器,您就无法做到.

请将每个用例放在一个单独的答案中,以便可以进行投票,如果您知道如何在没有预备教授的情况下实现其中一个答案,请指出该答案的评论.

c++ c-preprocessor

171
推荐指数
19
解决办法
9万
查看次数

在参数数量上重载宏

我有两个宏,FOO2并且FOO3:

#define FOO2(x,y) ...
#define FOO3(x,y,z) ...
Run Code Online (Sandbox Code Playgroud)

我想定义一个新的宏FOO如下:

#define FOO(x,y) FOO2(x,y)
#define FOO(x,y,z) FOO3(x,y,z)
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为宏不会在参数数量上超载.

无需修改FOO2FOO3,是有一些方法来定义一个宏FOO(使用__VA_ARGS__或以其他方式),以获得分派的相同的效果FOO(x,y)FOO2,并FOO(x,y,z)FOO3

c macros c-preprocessor

168
推荐指数
6
解决办法
5万
查看次数

如何手动弃用成员

与Objective-C不同,Swift没有预处理器,那么还有办法手动弃用类的成员吗?

我正在寻找类似的东西:

-(id)method __deprecated;
Run Code Online (Sandbox Code Playgroud)

objective-c deprecated ios c-preprocessor swift

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

在C++中__FILE __,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

假设您的C++编译器支持它们,是否有任何特殊原因使用__FILE__,__LINE__以及__FUNCTION__用于记录和调试目的?

我主要关注的是为用户提供误导性数据 - 例如,由于优化而报告错误的行号或功能,或者因此导致性能下降.

基本上,我可以信任__FILE__,__LINE____FUNCTION__永远做正确的事?

c++ debugging logging c-preprocessor

149
推荐指数
6
解决办法
23万
查看次数