extern int test();
int main()
{
return test();
}
Я строю код с помощью gcc -c -o test.o test.c
и не обнаруживаю никакого искажения имени при запуске nm test.o
. nm
выводит test
, но не _test
.
Мое окружение ubuntu 16.04
gcc 5.4.0
extern int test();
int main()
{
return test();
}
Я строю код с помощью gcc -c -o test.o test.c
и не обнаруживаю никакого искажения имени при запуске nm test.o
. nm
выводит test
, но не _test
.
Мое окружение ubuntu 16.04
gcc 5.4.0
Кажется, вы ожидаете, что к глобальным символам будет добавлено подчеркивание. Это то, что не делается в ELF, который является форматом объекта, который использует Linux. Старые двоичные форматы, такие как a.out или coff, требовали этого, а ELF — нет.
Кстати. термин «исправление» обычно используется для изменения символов С++, что является другой вещью.
Изменение имени не происходит в программах на C. Это происходит в программах на C++.
Вот почему вы не можете перегружать функции в C, но можете в C++.
Функция main
возвращает значение после вызова функции test
. Возвращаемое значение test
затем присваивается возвращаемому значению main
.
Никакого искажения имени не требуется.