Нет, и вам не следует пытаться написать программу с двумя функциями с одинаковым именем.
В особом случае, когда функции фактически определены в заголовочном файле (а не только в прототипах), вы может сделать это:
#define function function_file1
#include "file1.h"
#undef function
#define function function_file2
#include "file2.h"
#undef function
int
main (void)
{
int a = 2;
printf ("%d\n", function_file1 (a));
printf ("%d\n", function_file2 (a));
}
НО если вы переименуете прототип функции, то вы фактически не переименовали реальную функцию, поэтому вы получите неопределенный символошибка при соединении.
В любом случае, если у вас есть две функции, определенные с одинаковым именем, они все равно не будут ссылаться, независимо от того, что вы еще делаете в источниках.(В C ++ иногда можно определить две вещи с одинаковыми именами, но One-Definition-Rule означает, что компоновщик может предположить, что они на самом деле являются одной и той же вещью, и просто выбрать одну.)
Вот почему библиотеки должны использовать имена, которые не будут использоваться в других местах - обычно путем добавления общего префикса ко всем именам символов (например, my_unique_lib_initialize()
).