我很想知道在以下赋值操作中对filp和x指针使用括号:#defineinit_sync_kiocb(x,filp)\do{\structtask_struct*tsk=current;\(x)->ki_flags=0;\(x)->ki_users=1;\(x)->ki_key=KIOCB_SYNC_KEY;\(x)->ki_filp=(filp);\//Thislinehere........来源:https://github.com/gp-b2g/gp-peak-kernel/blob/master/include/linux/aio.h#L135 最佳答
我正在浏览Linux内核代码,在filehid.h中,HID_QUIRK_ALWAYS_POLL宏定义为:#defineHID_QUIRK_ALWAYS_POLLBIT(10)BIT(10)是什么意思?我对C不是很熟悉,但据我所知(和研究),没有这样的位操作函数。 最佳答案 看起来您可以在包含的第一个头文件中找到答案,即bitops.h!#defineBIT(nr)(1UL即BIT为指定的位数定义了一个位掩码,从0(最低有效位或最右边的位)到适合unsignedlong的任何值。所以BIT(10)应该评估为1024的数值(即1)。
连接宏中定义的字符串的最简单方法是什么。即我正在寻找的伪代码如下:#defineROOT_PATH"/home/david/"#defineINPUT_FILE_AROOT_PATH+"data/inputA.bin"#defineINPUT_FILE_BROOT_PATH+"data/inputB.bin"...#defineINPUT_FILE_ZROOT_PATH+"data/inputZ.bin"我知道的唯一方法是在代码中使用strcat,或者使用string类,然后使用c_str方法,但是当我有很多输入文件时它会变得困惑。我想直接使用INPUT_FILE_A等,没有很多局部变
gcc/g++4.*中有没有办法编写一个扩展为多行的宏?以下代码:#defineAX\Y扩展到XY我需要一个宏扩展到XY 最佳答案 知道了!#defineanlb/**/A/**/Banlbanlbgcc-E-CCnl.c/**/A/**/B/**/A/**/B 关于c++-如何让G++预处理器在宏中输出换行符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2271078/
我知道我的问题类似于thisone或thisone,但我发现它不是真的一样,而且,第二个没有接受答案,我决定问一下在调用类似函数的宏时添加预处理器指令是否正确?就我而言,我有一个类似函数的宏:#defineFUNC_MACRO(a,b)//dosomethingwiththevariables如果定义了其他宏,我在代码中的某处调用它时会有所不同://...FUNC_MACRO(aVal#ifdefANOTHER_MACRO+offset#endif//ANOTHER_MACRO,bVal);//...我在我的机器(linux,使用gcc4.8)上进行了测试,它工作正常(有和没有预处理器
见于thissite,代码使用括号中的波浪号显示宏调用:HAS_COMMA(_TRIGGER_PARENTHESIS___VA_ARGS__(~))//^^^这是什么意思/做什么?我怀疑这只是一个空洞的论点,但我不确定。它是否可能特定于C(99),例如__VA_ARGS__特定于C99并且存在于C++中? 最佳答案 在Boost.Preprocessor的介绍页面上,在A.4.1.1水平重复中给出了一个例子#defineTINY_print(z,n,data)data#defineTINY_size(z,n,unused)\temp
我正在为嵌入式项目使用SDK。在这个源代码中,我发现了一些至少我觉得很奇怪的代码。在SDK的很多地方都有这种格式的源代码:#defineATCI_IS_LOWER(alpha_char)(((alpha_char>=ATCI_char_a)&&(alpha_char=ATCI_CHAR_A)&&(alpha_char这里使用三元运算符有什么不同吗?不是#defineFOO(1>0)同#defineBAR((1>0)?1:0)?我尝试通过使用来评估它printf("%d",FOO==BAR);并得到结果1,所以看起来它们是相等的。有理由像他们那样编写代码吗?
假设我们有一个像这样的宏#defineFOO(type,name)typename我们可以像这样使用FOO(int,int_var);但并不总是那么简单:FOO(std::map,map_var);//error:macro"FOO"passed3arguments,buttakesjust2当然可以:typedefstd::mapmap_int_int_t;FOO(map_int_int_t,map_var);//OK这不是很符合人体工程学。必须处理Plus类型的不兼容性。知道如何用宏解决这个问题吗? 最佳答案 如果您不能使用括号
我正在编写一个跨平台代码,它应该在linux、windows、MacOS上编译。在windows上,我必须支持visualstudio和mingw。有一些特定于平台的代码,我应该将它们放在#ifdef..#endif环境中。比如这里我放了win32的具体代码:#ifdefWIN32#include#endif但是我如何识别linux和macOS?我应该使用什么定义名称(或等)? 最佳答案 对于MacOS:#ifdef__APPLE__对于Windows上的MingW:#ifdef__MINGW32__对于Linux:#ifdef__