Soy consciente de que en C no se puede convertir implícitamente, por ejemplo, char**
-const char**
(compárese con C-Faq, SO question 1, SO Question 2).C idiomática para la const dobles triples
Por otro lado, si veo una función declarada como tal:.
void foo(char** ppData);
debo asumir la función, puede cambiar los datos pasados en Por lo tanto, si estoy escribiendo una función que no cambiar los datos, es mejor, en mi opinión, a declarar:
void foo(const char** ppData);
o incluso:
void foo(const char * const * ppData);
Pero eso pone a los usuarios de la función en una posición incómoda. Puede ser que tengan :
int main(int argc, char** argv)
{
foo(argv); // Oh no, compiler error (or warning)
...
}
Y con el fin de llamar limpiamente mi función, por lo que necesitaría para insertar un yeso.
Vengo de un fondo en su mayoría C++, donde esto es un problema menor debido a las reglas de const más profundas de C++.
¿Cuál es la solución idiomática en C?
Declarar foo como tomar una
char**
, y acaba de documentar el hecho de que no va a cambiar sus entradas? Eso parece un poco asqueroso, esp. ya que castiga a los usuarios que podrían tener unconst char**
que quieren pasarlo (ahora tienen que emitir distancia const-ness)usuarios de la Fuerza de emitir su entrada, añadiendo const-dad.
¿Algo más?
Supongo que 2) está bien. – Andrey
Creo que 2) es apropiado. –
1) 'const' es una anotación de compilador inútil en C. –