+mentre per la seconda sono ovviamante necessarie delle funzioni; la situazione
+è complicata dal fatto che ci sono molti casi in cui alcuni di questi limiti
+sono fissi in una implementazione mentre possono variare in un altra.
+Quando i limiti sono fissi vengono definiti come macro nel file
+\file{limits.h}, se invece possono variare, il loro valore sarà ottenibile
+tramite la funzione \func{sysconf}.
+
+Lo standard ANSI C definisce dei limiti che sono tutti fissi e pertanto
+disponibili al momanto della compilazione; un elenco è riportato in
+\tabref{tab:sys_ansic_macro}, come ripreso da \file{limits.h}; come si vede
+per la maggior parte attengono alle dimensioni dei tipi dei dati interi, le
+informazioni analoghe per i dati in virgola mobile sono definite a parte e
+accessibili includendo \file{float.h}. Un'altra costante prevista dallo
+standard (l'unica che può non essere fissa e che pertanto non è definita in
+\file{limits.h}) è \macro{FOPEN\_MAX}, essa deve essere definita in
+\file{stdio.h} ed avere un valore minimo di 8.
+
+\begin{table}[htb]
+ \centering
+ \footnotesize
+ \begin{tabular}[c]{|l|r|l|}
+ \hline
+ \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\
+ \hline
+ \hline
+ \macro{MB\_LEN\_MAX}& 16 & massima dimensione di un
+ carattere multibyte\\
+ \macro{CHAR\_BIT} & 8 & bit di \type{char}\\
+ \macro{UCHAR\_MAX}& 255 & massimo di \type{unsigned char}\\
+ \macro{SCHAR\_MIN}& -128 & minimo di \type{signed char}\\
+ \macro{SCHAR\_MAX}& 127 & massimo di \type{signed char}\\
+ \macro{CHAR\_MIN} &\footnotemark& minimo di \type{char}\\
+ \macro{CHAR\_MAX} &\footnotemark& massimo di \type{char}\\
+ \macro{SHRT\_MIN} & -32768 & minimo di \type{short}\\
+ \macro{SHRT\_MAX} & 32767 & massimo di \type{short}\\
+ \macro{USHRT\_MAX}& 65535 & massimo di \type{unsigned short}\\
+ \macro{INT\_MAX} & 2147483647 & minimo di \type{int}\\
+ \macro{INT\_MIN} &-2147483648 & minimo di \type{int}\\
+ \macro{UINT\_MAX} & 4294967295 & massimo di \type{unsigned int}\\
+ \macro{LONG\_MAX} & 2147483647 & massimo di \type{long}\\
+ \macro{LONG\_MIN} &-2147483648 & minimo di \type{long}\\
+ \macro{ULONG\_MAX}& 4294967295 & massimo di \type{unsigned long}\\
+ \hline
+ \end{tabular}
+ \caption{Macro definite in \file{limits.h} in conformità allo standard
+ ANSI C.}
+ \label{tab:sys_ansic_macro}
+\end{table}
+
+\footnotetext[1]{il valore può essere 0 o \macro{SCHAR\_MIN} a seconda che il
+ sistema usi caratteri con segno o meno.}
+
+\footnotetext[2]{il valore può essere \macro{UCHAR\_MAX} o \macro{SCHAR\_MAX}
+ a seconda che il sistema usi caratteri con segno o meno.}
+
+A questi valori lo standard ISO C90 ne aggiunge altri tre, relativi al tipo
+\type{long long} introdotto con il nuovo standard, i relativi valori sono in
+\tabref{tab:sys_isoc90_macro}.
+
+\begin{table}[htb]
+ \centering
+ \footnotesize
+ \begin{tabular}[c]{|l|r|l|}
+ \hline
+ \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\
+ \hline
+ \hline
+ \macro{LLONG\_MAX}& 9223372036854775807&massimo di \type{long long}\\
+ \macro{LLONG\_MIN}&-9223372036854775808&minimo di \type{long long}\\
+ \macro{ULLONG\_MAX}&18446744073709551615&
+ massimo di \type{unsigned long long}\\
+ \hline
+ \end{tabular}
+ \caption{Macro definite in \file{limits.h} in conformità allo standard
+ ISO C90.}
+ \label{tab:sys_isoc90_macro}
+\end{table}
+
+Lo standard POSIX.1 definisce 33 diversi limiti o costanti, 15 delle quali,
+riportate in \secref{tab:sys_posix1_base}, devono essere sempre dichiarate,
+in quanto definiscono dei valori minimi che qualunque implementazione che sia
+conforme allo standard deve avere; molti di questi valori sono di scarsa
+utilità, essendo troppo ristretti ed ampiamente superati in tutte le
+implementazioni dello standard.
+
+\begin{table}[htb]
+ \centering
+ \footnotesize
+ \begin{tabular}[c]{|l|r|p{8cm}|}
+ \hline
+ \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\
+ \hline
+ \hline
+ \macro{\_POSIX\_ARG\_MAX} &4096 & dimensione massima degli argomenti
+ passati ad una funzione della famiglia
+ \func{exec}.\\
+ \macro{\_POSIX\_CHILD\_MAX} &6 & numero massimo di processi contemporanei
+ che un utente può eseguire.\\
+ \macro{\_POSIX\_LINK\_MAX} &8 & numero massimo di link a un file\\
+ \macro{\_POSIX\_MAX\_CANON}&255 & spazio disponibile nella coda di input
+ canonica del terminale\\
+ \macro{\_POSIX\_MAX\_INPUT}&255 & spazio disponibile nella coda di input
+ del terminale\\
+ \macro{\_POSIX\_NGROUPS\_MAX}&0 & numero di gruppi supplementari per
+ processo.\\
+ \macro{\_POSIX\_OPEN\_MAX} &16 & numero massimo di file che un processo
+ può mantenere aperti in contemporanea.\\
+ \macro{\_POSIX\_NAME\_MAX}& 14 & lunghezza in byte di un nome di file. \\
+ \macro{\_POSIX\_PATH\_MAX}& 256 & lunghezza in byte di pathname.\\
+ \macro{\_POSIX\_PIPE\_BUF}& 512 & byte scrivibili atomicamente in una
+ pipe\\
+ \macro{\_POSIX\_SSIZE\_MAX}&32767& valore massimo del tipo
+ \type{ssize\_t}.\\
+ \macro{\_POSIX\_STREAM\_MAX}&8 & massimo numero di stream aperti per
+ processo in contemporanea.\\
+ \macro{\_POSIX\_TZNAME\_MAX}& & dimensione massima del nome di una
+ \texttt{timezone} (vedi ).\\
+ \hline
+ \end{tabular}
+ \caption{Costanti fisse, definite in \file{limits.h}, richieste
+ obbligatoriamente allo standard POSIX.1.}
+ \label{tab:sys_posix1_base}
+\end{table}
+
+Oltre a questi valori lo standard ne definisce altri a riguardo
+
+
+\begin{table}[htb]
+ \centering
+ \footnotesize
+ \begin{tabular}[c]{|l|r|p{8cm}|}
+ \hline
+ \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\
+ \hline
+ \hline
+ \macro{\_POSIX\_AIO\_LISTIO\_MAX}& 2& \\
+ \macro{\_POSIX\_AIO\_MAX}& 1& \\
+ \macro{\_POSIX\_DELAYTIMER\_MAX}& 32 & \\
+ \macro{\_POSIX\_MQ\_OPEN\_MAX}& 8& \\
+ \macro{\_POSIX\_MQ\_PRIO\_MAX}& 32& \\
+ \macro{\_POSIX\_FD\_SETSIZE}& 16 & \\
+ \macro{\_POSIX\_NAME\_MAX}& 14& \\
+ \macro{\_POSIX\_PATH\_MAX}& 256& \\
+ \macro{\_POSIX\_PIPE\_BUF}& 512& \\
+ \macro{\_POSIX\_SSIZE\_MAX}& 32767& \\
+ \macro{\_POSIX\_STREAM\_MAX}&8 & \\
+ \macro{\_POSIX\_TZNAME\_MAX}& 6& \\
+ \hline
+ \end{tabular}
+ \caption{Macro definite in \file{limits.h} in conformità allo standard
+ POSIX.1.}
+ \label{tab:sys_posix1_macro}
+\end{table}