Verifique el tipo de cadena (por ejemplo, literal, matriz, puntero) pasada a una función [duplicado]
Esta pregunta ya tiene una respuesta aquí:
Restrict pasó el parámetro a un literal de cadena 6 respuestasTengo una función, que toma una matriz de caracteres y su tamaño:
void store_string (const char *p, size_t size); // 'p' & 'size' stored in map
La función está envuelta por una macro como:
#define STORE_STRING(X) store_string(X, sizeof(X))
Mi problema es que de alguna manera quiero prohibir o informar al usuario que solo se debe pasar literal de cadena a esta función. Porque, si se almacena algún puntero o matriz local dentro del mapa, ¡entonces podrían salirse del alcance y crear un caos!
¿Hay alguna forma de tiempo de compilación (preferido) o al menos una forma de hacerlo en tiempo de ejecución?