int main() { int main=5; printf("%d",main); return 0; }
В этом случае ошибки нет, и компилятор gcc выводит 5. Но если я напишу
int main() { int printf=5; printf("%d",printf); return 0; }
, компилятор выдаст ошибку ... почему?
В первом примере вы «скрываете» функцию main, заменяя ее объектом int.
main
int
Во втором примере вы «скрываете» функцию printf, заменяя ее наint объект.Попытка вызвать int незаконна.
printf
5("foo"); /* illegal to call "function" 5 */
В своем первом фрагменте кода вы объявляете локальную переменную main , которая находится в области действия local , поэтому она не влияет на область действия global (где объявлена функция main () )
Во втором фрагменте кода вы объявляете "printf" в глобальной области видимости, где живет функция printf () значит у вас конфликт.
Во втором примере вы объявили локальную переменную типа int с именем printf.Это будет иметь приоритет над глобальной функцией с тем же именем.Так что ошибка в том, что имя printf относится к int, а не к функции.
В первом примере вы переопределяете глобальное имя функции main с локальной переменной main.Если бы вы этого не сделали, вы бы смогли вызвать функцию «main» из функции main, и это сработало бы.С вашим объявлением переменной это больше невозможно, так как объявление локальной переменной имеет приоритет - но оно все равно идеально подходит для использования в форме переменной.
Вы не должны использовать имена функций в качестве имен переменных, по любой причине.