В стандарте C (и, я полагаю, C ++) вы не можете, по крайней мере, не для размещенной среды (но см. Ниже). Стандарт определяет, что отправной точкой для кода C является main
. Стандарт (c99) не оставляет много места для аргументов:
5.1.2.2.1 Запуск программы: (1) Функция, вызываемая при запуске программы, называется основной.
Вот и все. Затем он немного размышляет о параметрах и возвращаемых значениях, но там действительно нет никакой возможности для изменения имени.
Это для размещенной среды. Стандарт также предусматривает автономную среду (т. Е. Не ОС, для таких вещей, как встроенные системы). Для автономной среды:
В автономной среде (в которой выполнение программы на С может происходить без какой-либо выгоды от операционной системы), имя и тип функции, вызываемой при запуске программы, определяются реализацией. Любые библиотечные средства, доступные для автономной программы, кроме минимального набора, требуемого пунктом 4, определяются реализацией.
Вы можете использовать "хитрость" в реализациях C , чтобы вы могли сделать так, чтобы main
не было точкой входа. Это на самом деле то, что делали ранние компиляторы Windows, чтобы отметить WinMain
в качестве начальной точки.
Первый способ: компоновщик может включить некоторый предварительный стартовый код в файл, подобный start.o
, и именно этот фрагмент кода запускается для настройки среды C, а затем вызывает main
. Ничто не помешает вам заменить это чем-то, что вызывает bob
.
Второй способ: некоторые компоновщики предоставляют эту опцию переключателем командной строки, так что вы можете изменить его без перекомпиляции кода запуска.
Третий способ: вы можете связать этот кусок кода:
int main (int c, char *v[]) { return bob (c, v); }
, а затем ваша точка входа для вашего кода, по-видимому, bob
, а не main
.
Однако все это, хотя, возможно, и представляет академический интерес, не меняет того факта, что я не могу вспомнить ни одной единственной ситуации за многие десятилетия работы над кодом, где это было бы либо необходимо, либо желательно. *
Я хотел бы спросить интервьюера: с чего бы вам хотеть сделать это?