質問
C言語、C++言語において配列のインデックスとして使うべき型は、size_t ですか?ptrdiff_t ですか?
すべてのインデックスが、ptrdiff_t 型で格納できる保証はありますか。
具体例
size_t
C
1#include <stddef.h> 2#include <stdint.h> 3#include <stdio.h> 4 5int main(void) { 6 unsigned char str[1000000]; 7 const size_t size = sizeof(str) / sizeof(*str); 8 9 for (size_t i = 0; i < size; ++i) { 10 str[i] = i; 11 } 12 for (size_t i = size - 1; i != SIZE_MAX; --i) { // 補足: i < size を好む人もいる 13 printf("%hhu ", str[i]); // 蛇足: 既定の実引数拡張があるから %u でいいの? 14 } 15}
ptrdiff_t
C
1#include <stddef.h> 2#include <stdint.h> 3#include <stdio.h> 4 5int main(void) { 6 unsigned char str[1000000]; 7 const size_t size = sizeof(str) / sizeof(*str); 8 9 for (ptrdiff_t i = 0; i < size; ++i) { 10 str[i] = i; 11 } 12 for (ptrdiff_t i = (ptrdiff_t)size - 1; i >= 0; --i) { 13 printf("%hhu ", str[i]); 14 } 15}
個人的な考え
結論 ptrdiff_t になるような気がしますが、そうなったとしても、
C
1typedef ptrdiff_t index_t;
とでもして、index_t を使うべきかなと思っています。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/19 01:26