c++ compilation extern overloading

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.