Может ли функция, называемая Main()
, с капиталом M, будет создана в C?
Поскольку два элемента с одинаковым именем, но разные случаи рассматриваются как отдельные объекты, на мой взгляд, Main()
может быть создан, но мне просто нужно подтвердить.В C может быть создана функция Main()?
ответ
Это ужасная идея, и некоторые среды, которые не являются строго соответствующими, могут зарезервировать это имя. Но линкер должен быть чувствителен к регистру, а Main с капиталом не зарезервирован.
Вы имеете в виду, что нечеткие среды могут зарезервировать Main() как main() и не различать их? – Cersei
Как Visual Studio резервирует WinMain, по крайней мере, в некоторых режимах. Если компилятору нужна альтернативная запись со слегка отличающимися характеристиками к main(), Main является очевидным выбором идентификатора. –
int Main (void)
{
return 0;
}
int main (void)
{
return 0;
}
Компиляция и ссылки отлично. Он чувствителен к регистру.
Спасибо! Я все еще новичок; что вы подразумеваете под «это отличные ссылки»? Обе функции находятся в одном файле, не так ли? Извините, если это ужасно глупый вопрос. – Cersei
Да, обе функции в одном файле. У вас есть компилятор, который переводит исходный код в объект-код. Компонент связывает все вместе, чтобы иметь исполняемый файл. Если у вас несколько файлов, они свяжут их вместе, а также с некоторыми библиотеками системы (например, для ввода-вывода, ...). В зависимости от вашей среды оба действия выполняются автоматически, если вы пытаетесь создать исполняемый файл. – chris01
Еще один, чтобы сказать: если вы создадите второй файл и поместите в него нестандартный Main, то компоновщик принесет вам сообщение об ошибке «множественное определение Main». Просто чтобы увидеть, как компоновщик выполняет свою работу. Это не часть вашего вопроса. – chris01
Несомненно, почему бы и нет? Препроцессору и компилятору все равно, что "Main"
и "main"
по существу аналогичны. C чувствителен к регистру, поэтому "Main"
и "main"
- это два совершенно разных имени. (Он не может помочь читаемость, но нет никаких технических причин, вы не можете) Например,
#include <stdio.h>
int Main (int argc, char **argv)
{
for (int i = 1; i < argc; i++)
printf (" %2d : %s\n", i, argv[i]);
return argc;
}
int main (int argc, char **argv) {
printf ("\n %d arguments.\n", Main (argc, argv) - 1);
return 0;
}
Пример использования/вывода
$ ./bin/mainMain The quick brown fox jumps over a lazy dog.
1 : The
2 : quick
3 : brown
4 : fox
5 : jumps
6 : over
7 : a
8 : lazy
9 : dog.
9 arguments.
Вы уже получили ответ, но только добавить немного авторитетных цитат, непосредственно из C11
, глава §5.1.2
Execution среды:
Определены две среды исполнения: автономные и размещенные. В обоих случаях запуск программы происходит, когда назначенная функция C вызывается средой исполнения . [...]
тогда, §5.1.2.2, Hosted среда, p1, "запуск программы"
Функция называется при запуске программы называется
main
. [...]
Тем не менее, как мы знаем, С чувствителен к регистру, (цитирую §6.4.2.1/2, "Идентификаторы", Общие)
Идентификатор является последовательность недигитных символов (включая символы подчеркивания _, строчные и прописные латинские буквы и другие символы) и цифры, которые обозначают один или несколько объектов, как описано в 6.2.1. Строчные и прописные буквы различны. [....]
такого идентификатор без того же случай, как это main()
не то же самое, какmain()
, будь то Main()
, MAIN()
, maiN()
или любая другая комбинация возможно. Все они имеют разные идентификаторы в отношении C.
Таким образом, ответ на
В C, может функция называется Main) будет создан (?
есть, конечно.
Просто чтобы прояснить немного больше, если вы только создать Main()
и оставить из main()
, компилятор сам по себе не будет иметь никакого способа узнать, что вы имели в виду main()
написав Main()
, так как они имеют разные идентификаторы для компилятора ,
«.. как мы уже знаем ...» - не нужно ссылаться на Википедию, как это конкретно указано в 6.4.2.1: «Строчные и прописные буквы различны». :) – usr2564301
@RadLexus Ну, тогда позвольте мне изменить эту вики на стандартную цитату .. :) –
Это * путь * лучше, чем «почему бы нет»: D – usr2564301
Только если вы пишете одну или несколько своих букв в верхнем регистре, я думаю, что, как основной или MAIN, иначе ваш компилятор не сможет указать, какой основной вам нужен, потому что main уже является функцией в C. Примечание: Я тоже новичок, поэтому я мог ошибаться.
Почему бы вам не попробовать? –
Я бы пошел на 'maiN()' –
Ну, это было на среднесрочный тест для C! – Cersei