c++ - ¿Cómo puedo evitar la sobrecarga para las funciones externas "C"?
compilation overloading (2)
Estoy escribiendo una biblioteca de c ++ que expone algunas funciones que solo usa el código C #. Sin embargo, como accidentalmente escribí mal el parámetro, descubrí que este código se puede compilar y vincular con éxito, incluso sin ninguna advertencia, siempre y cuando no use la función (versión no mal escrita) en el archivo cpp.
struct Dummy { int a; double b; };
extern "C" void SetArray(Dummy* x, int cnt);
void SetArray(Dummy x, int cnt)
{
// a TODO placeholder.
}
¿Cómo puedo dejar que el compilador arroje un error o una advertencia para este caso? La opción del compilador -Wall está establecida pero todavía no hay ninguna advertencia. Utilizando tdmgcc 5.1.0.
Puede hacer alguna afirmación que fallará si la función está sobrecargada:
static_assert(::std::is_same_v<void (Dummy *, int), decltype(SetArray)>);
error: decltype no puede resolver la dirección de la función sobrecargada
Puede incluir extern "C"
en la definición, así como la declaración.
struct Dummy { int a; double b; };
extern "C" void SetArray(Dummy* x, int cnt);
extern "C" void SetArray(Dummy x, int cnt)
{
// a TODO placeholder.
}
El comentario de Quentin sobre la respuesta de VTT estaba a mitad de camino: no es que las funciones de C no puedan sobrecargarse, es que las funciones de C no pueden sobrecargarse con otras funciones de C. El compilador aplicará esto, pero solo puede hacerlo si especifica explícitamente que desea una función C en ambas declaraciones.