我正在阅读 Linux 0.11 的源代码,我在 unistd.h
中找到了这段代码:
#define _syscall3(type,name,atype,a,btype,b,ctype,c) \
type name(atype a,btype b,ctype c) \
{ \
long __res; \
__asm__ volatile ("int $0x80" \
: "=a" (__res) \
: "0" (__NR_##name),"b" ((long)(a)),"c" ((long)(b)),"d" ((long)(c))); \
if (__res>=0) \
return (type) __res; \
errno=-__res; \
return -1; \
}
每行末尾的符号 \
是什么意思?
答案 0 :(得分:1)
好的,看到第一行的 #define
了吗?这意味着我们在谈论“C 预处理器”
因此,它基本上是为某物定义一个“别名”(在本例中,为 _syscall3(type,name,atype,a,btype,b,ctype,c)
)。
它将在源代码中找到它的任何地方用它的别名替换定义的字符串的每次出现。在编译器开始解析代码之前,编译器会读取长版本。
由于理论上预处理器在当时处理一行/命令,但人类读取长字符串很糟糕,我们有 \
将所有这些行“连接”成一行。现在我们可以真正读取代码了!
所以,回答您的问题:\
表示该行将在下方继续。
答案 1 :(得分:0)
宏以行尾结束。这会产生很长的线。为避免这种情况,您可以使用 .
扩展该行#define add(a,b)\
((a)+(b))
与
相同#define add(a,b) ((a)+(b))