Con el extern "C" funciona perfectamente, siempre es mas facil probarlo (como hice yo antes de postear). La cuestion principal es si tiene sentido mezclar codigo de diferentes lenguajes en un solo proyecto (no en librerias).
La compilacion condicional tambien podria ser asi por ejemplo:
Código:
#ifdef __cplusplus
#define EXPORTAR extern "C"
#else
#define EXPORTAR
#endif
EXPORTAR int suma(int x, int y);