2013-12-12 47 views
29

正確的printf說明符,是那裏%zsize_tpid_t這樣的標記嗎?什麼是我目前使用一個顯式的長期使用<code>%ld</code>打印<code>pid_t</code>打印將爲pid_t

如果不是什麼最好的印刷方式pid_t

+1

我正在越來越多。 %d hello.c:9:42:warning:format指定類型'long',但參數的類型爲 'pid_t'(又名'int')[-Wformat]當我嘗試ld –

+0

@KorayTugay請注意以上字詞: 「我目前正在使用明確的演員陣容」。 –

回答

14

沒有這樣的說明符。我認爲你正在做的事情很好......你可以使用更寬的int類型,但是沒有實現,pid_t比long更長,可能永遠不會。

+0

不錯。如果您想使用自己的'pid_t'規範來自定義'printf',請查看此頁面:http://stackoverflow.com/questions/9260170/is-this-possible-to-customize-printf –

+0

總數與os的位數有關的進程的數量?例如可以有更多的sizeof(int)? –

+0

請參閱http://stackoverflow.com/questions/1922761/size-of-pid-t-uid-t-gid-t-on-linux ...無論OS位大小如何,pid_t通常都是32位。系統*可能有更大的系統,但我不會期望它。無論如何,長期以來都會有很大的安全性。 –

2

對於缺少匹配格式說明符的整數類型,與pid_t一樣,但具有已知符號,轉換爲最寬匹配簽名類型和打印。如果符號未知,則轉換爲最寬的無符號類型。

// C99 
#include <stdint.h> 

pid_t pid = foo(); 
printf("pid = %jd\n", (intmax_t) pid); 

// pre-C99 
pid_t pid = foo(); 
printf("pid = %ld\n", (long) pid); 
相關問題