Tiene que ver con la forma variable de listas de argumentos de trabajo (va_list
, visto como ...
en los parámetros) Cuando el código intenta extraer todos los valores de la lista, necesita saber cuándo detenerse (porque no sabe cuántos hay). Denotamos el final de la lista con un valor especial llamado "centinela", que generalmente es NULL
. De esta manera, cuando el código de procesamiento se encuentra con un nil
en el va_list
, sabe que se ha llegado al final. Si se omite la nil
, obtendrá errores extraños, ya que el código será sólo sigue leyendo abajo de la pila, interpretar las cosas como objetos, hasta que encuentra un nil
.
Esto es muy similar a la razón por cadenas de C tienen que ser terminada en NULL
.
Como nota al margen, al estilo de los métodos stringWithFormat:
y similares printf
no necesita un centinela, porque se da cuenta de cuántos parámetros necesidades en función de cuántos %
modificadores están en la cadena de formato. Así que si se le da una cadena de formato de @"hello, %@"
, entonces será sólo buscan un argumento adicional, debido a que sólo hay un modificador%.
1, pero sigo pensando que un cylon BSG-ascii arte sería manera más fría que NULL para centinelas – slf