2011-09-04 101 views
19

我想要使用CPU_SET,這是一個glibc linux特定的宏,應該在sched.h中定義該宏手冊明確指出必須定義_GNU_SOURCE以便宏定義。但是,僅在定義了__USE_GNU(有一個#ifdef保護)時,纔看到標題CPU_SET。我似乎記得幾年前需要_GNU_SOURCE_GNU_SOURCE和__USE_GNU

問題:

1)顯然,聯機幫助頁已關閉。我如何通知維護人員該聯機幫助頁不正確?

2)什麼時候從_GNU_SOURCE__USE_GNU過渡發生(在版本或時間)方面

3)是否存在的情況下,其中的glibc的較新版本仍然使用_GNU_SOURCE?或者我可以安全地假設定義__USE_GNU就足夠了?

回答

27

_GNU_SOURCE是你應該自己定義的唯一一個。當定義_GNU_SOURCE並且可能在其他條件下時,__USE_GNU在內部通過features.h(其包含在所有其他glibc標頭中)中的機制來定義。定義或定義__USE_GNU自己會嚴重破壞glibc頭文件。

+0

如果我只使用'_GNU_SOURCE',我仍然會出錯。任何其他想法爲什麼會發生? –

+4

所有功能測試宏,比如'_GNU_SOURCE' **必須在包含任何**標準頭之前被定義。您迫不及待地定義它,直到您需要它的標題之前。 –

+0

我最終不得不在最內層的頭文件頂行定義'_GNU_SOURCE',但它的工作:) –

6

你必須先定義_GNU_SOURCE,然後再做任何事情。這段代碼在這裏工作:

#define _GNU_SOURCE 
#include <sched.h> 


int main() 
{ 
    cpu_set_t set; 
    CPU_SET(0, &set); 
    return 0; 
}