Вы можете компилировать отдельные файлы без main
, но вы не можете связывать их и, конечно, не можете запускать их, поскольку они не являются полными программами. Обратите внимание, что valgrind - это не инструмент статического анализа, а инструмент времени выполнения, и поэтому он бесполезен для отдельных блоков перевода, не связанных с работающей программой.
Если вы хотите протестировать отдельные файлы, обычной практикой является включение в каждый файл что-то вроде следующего:
#ifdef UNIT_TEST
int main(int argc, char **argv)
{
/* unit test code goes here */
}
#endif
И скомпилируйте файл с помощью -DUNIT_TEST
.