2013-05-07 44 views
2

我不熟悉这种类型的定义,需要帮助第5行做些什么?它是否重新定义了AND_CPU_0?这种类型的定义对一个&&有什么作用

#ifdef CONDITION_1 
#define AND_CPU_0 
#define AND_CPU_1 
#ifdef CONDITION_2 
#define AND_CPU_0 && [ $(get_id cpu) -ne 0] 
#endif 
#ifdef CONDITION_3 
#define AND_CPU_1 && [ $(get_id cpu) -ne 1] 
#endif 

#endif 

谢谢!

+0

更换应这个问题被标记'C',如果它只能引用C预处理器?有一个标签'c-preprocessor',但我不知道它是否真的相关...... – zakinster 2013-05-07 12:58:09

回答

2

#define AND_CPU_0 && [ $(get_id cpu) -ne 0]只是将AND_CPU_0定义为&& [ $(get_id cpu) -ne 0]

例如,在源代码中可以有

if (enable == true AND_CPU_0) { 

} 

这相当于

if (enable == true && [ $(get_id cpu) -ne 0]) { 

} 
+0

请注意'enable == true'可能不是平均布尔测试的最好例子:)。 – zakinster 2013-05-07 12:43:54

+0

是的。刚刚添加了“==真”的可视性。 – 2013-05-07 12:46:16

+0

好的。所以基本上'&& [$(get_id cpu)-ne 0]'是一回事,如果是#define AND_CPU_0的话。 – user1836141 2013-05-07 12:55:34

1

C预处理器简单地替换宏调用与宏的主体。

在这种情况下,如果你有一个shell脚本有这样的语句:

if [ something AND_CPU_0 ]; then ... fi 

它只会用

if [ something && [ $(get_id cpu) -ne 0] ]; then ... fi 
+0

'''如何处理if? – 2013-05-07 12:43:49

+0

@Koushik这显然不是'C'的例子 – zakinster 2013-05-07 12:44:42

+3

@Koushik OPs post中的预处理器宏看起来像POSIX(例如Unix,Linux,OSX)shell代码,所以我使用shell if语句展示了一个例子。请记住,C预处理器可以作为独立程序运行(在许多系统中称为“cpp”)来预处理任何文本文件。 – 2013-05-07 12:48:09