C y C++ son dos lenguajes diferentes.
Para que el código C funcione con C++ hay que declarar los objetos (en el sentido clásico, esto es, variables y funciones) como "externas en lenguaje C". Normalmente los modernos archivos de cabecera ya lo hacen, pero si no es este el caso (cosa que dudo, porque SDL no es nada viejo) puedes hacerlo así:
Código:
extern "C" {
#include <sdl/sdl.h>
}
Si con eso no funciona, es que algo estás haciendo mal. Y cambiar la extensión del archivo de ".c" a ".cpp" o ".cc" no es una solución, sino una chapuza.
El opuesto (que código C++ pueda utilizarse en C) es bastante más complicado, pero no imposible. Para ello basta con conocer el "mangled name" del objeto (de nuevo en el sentido clásico), esto es, el nombre que el compilador da a cada objeto, en el caso de llamadas a función añadir el puntero al objeto (esta vez en el sentido de C++) como primer parámetro y hacer la declaración en el archivo de cabecera, tal vez con ayuda del preprocesador.
Cada compilador utiliza un generador de mangled name diferente, pero suele ser común que sea "_clasemetodoparametrosretorno", donde "parametros" y "retorno" son las iniciales del tipo de cada parámetro o del retorno (por ejemplo, "v" para void, "i" para integer "l" para long int, etc.).
De todas formas, aunque el SDK sea en C++, dudo que la base esté escrita en dicho lenguaje, será como mucho una envolvente. Si me equivoco, sería el primer caso con el que me encuentro.
Marcadores