帶返回值的宏函數


c語言中,很多的庫函數都是用來實現的,下面我們來看一個函數,你不一定要知道它是什么函數,但你可以看到這個函數是怎么實現的,這個函數是sigfillset(sigset_t *set),是一個來自unix中的定義信號集的一個函數
sigfillset(sigset_t *set)初始化由set指向的信號集,是其包含所有的信號。這個函數若執行成功則返回0,出錯着返回-1。看一下它在unix中的一個實現。

#define sigfillset(ptr)   ((*ptr) = ~(sigset_t)0, 0)

sigset_t是一個整型數,將其所有位至1着表示包含所有信號,每一位代表一個信號。sigfillset函數需要一個返回值,並且必須返回0,所以使用c語言的逗號運算符,它將逗號運算符后面的值作為表達式的返回值

 

在使用逗號表達式中有一點需要注意的是,在逗號表達式中不可以聲明變量。

例如:

int n = (int a=5, ++a); //這是錯誤的

 

你可以這樣使用:

int a;

int n = (a=5, ++a);

 

那么n的值就是6;

另外在gcc中亦可用{}表達式作為返回值,如:

#define fucn1(a)  ({a= a+5; a;})

例如下面一個例子:

#include <stdio.h>
#define func(a) ({a=a+5; a;})
int main(void)
{
//int i;
//int a = (i=5, ++i);
int a=0;
int b = func(a);
printf("a=%d/n", a);
printf("b=%d/n", b);
return 0;
}

那么編譯:gcc main.c

運行:./a.out

輸出:

a=5

b=5

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM