¿Cómo comstackr código fuente C sin una función principal?

¿Cómo puedo comstackr mis archivos fuente de C sin necesidad de poner una función main dentro de ellos?

Recibo un error para los archivos .c que no tienen una función principal y no quiero tener que agregar la función principal solo para comstackr.

En GCC, el interruptor -c es lo que quieres.

-c significa “comstackr, no vincular”, y obtendrá un archivo de salida name.o

Use la opción -c de su comstackdor (funciona para GCC, opción probablemente idéntica para otros comstackdores c).

De la página del manual de GCC:

Cuando invoca GCC, normalmente realiza un preprocesamiento, comstackción, ensamblaje y enlace. Las “opciones generales” le permiten detener este proceso en una etapa intermedia. Por ejemplo, la opción -c dice que no se ejecute el enlazador. Luego, la salida consiste en archivos de objetos generados por el ensamblador.

La fase de enlace es el paso que busca main() y se queja si no lo encuentra.

Supongamos que tienes hello.c:

 #include #include _start() { exit(my_main()); } int my_main() { printf("Hello"); return 0; } 

Comstackr como

 gcc -nostartfiles hello.c 

y usted puede obtener un ejecutable de ella.

Puede comstackr archivos individuales sin main , pero no puede vincularlos y, por supuesto, no puede ejecutarlos , ya que no son progtwigs completos. Tenga en cuenta que valgrind no es una herramienta de análisis estático sino una herramienta de tiempo de ejecución y, por lo tanto, es inútil en unidades de traducción individuales no vinculadas a un progtwig ejecutable.

Si desea probar archivos individuales, una práctica común es incluir algo como lo siguiente en cada archivo:

 #ifdef UNIT_TEST int main(int argc, char **argv) { /* unit test code goes here */ } #endif 

Y comstack el archivo con -DUNIT_TEST .