Немного предыстории: если бы я хотел использовать, например, scanf()
для преобразования строки в стандартный целочисленный тип, например uint16_t
, я бы использовал SCNu16
из <inttypes.h>
, например так:
#include <stdio.h>
#include <inttypes.h>
uint16_t x;
char *xs = "17";
sscanf(xs, "%" SCNu16, &x);
Но более необычный целочисленный тип, такой как pid_t
, не имеет ничего подобного; <inttypes.h>
поддерживает только нормальные целочисленные типы. Чтобы преобразовать другой способ, в переносимое printf()
a pid_t
, я могу привести его к intmax_t
и использовать PRIdMAX
, например:
#include <stdio.h>
#include <inttypes.h>
#include <sys/types.h>
pid_t x = 17;
printf("%" PRIdMAX, (intmax_t)x);
Однако, похоже, нет способа переносить scanf()
в pid_t
. Так вот мой вопрос: как это сделать переносимо?
#include <stdio.h>
#include <sys/types.h>
pid_t x;
char *xs = 17;
sscanf(xs, "%u", &x); /* Not portable! pid_t might not be int! /*
Я думал о scanf()
перед intmax_t
, а затем проверял, что значение находится в пределах pid_t
, перед приведением к pid_t
, но, похоже, нет способа получить максимум или минимальные значения для pid_t
.