2015-11-26 3 views
5

Я недавно натолкнулся на кодирование гольфа & dagger; вопрос, в котором я думал написать функцию типа int в main сам, который мог получить доступ ко всем переменным внутри main. Но чтобы уменьшить количество символов, я думал о написании функции рядом с переменной. Что-то вроде этого:Можем ли мы объявить функцию вместе с переменными в C?

int i,f(){/*function code*/}; 

Могу ли я это сделать? Если да/нет, то почему?


& dagger;   Code Golf - это форма рекреационного программирования, в котором данный вызов должен решаться с помощью кратчайшей возможной программы. Уменьшение количества символов в исходном коде является основной целью, не требующая обслуживания и удобочитаемости. Перед комментированием учтите эту цель.

+7

Нет языка C/C++. Выбери один. – Olaf

+2

Что происходит, когда вы пытаетесь? –

+1

Пожалуйста, даже не думайте об этом (если это возможно или нет)! –

ответ

6
int i,f(){/*function code*/}; 

В C нет, вы не можете сказать, что это недействительный синтаксис.

Что вы можете сделать это:

int i, f(); /* declare an int i and a function f that returns an int */ 

, который, вероятно, не то, что вы хотите.

+0

Это здорово! Люди действительно делают это? Я был бы ужасно растерян. –

+2

@Ike no sane people сделают это IMHO ... – ouah

+0

'f()' - это старый стиль K & R и облысение. Он должен генерировать предупреждение в правильно сконфигурированных компиляторах. Используйте правильные прототипы. – Olaf

1

В C функция не может быть определена в другой функции ... Это так просто.

Как вы заявили, если вы хотите получить доступ основных функциональных переменных в ваших вспомогательных функций .. Его невозможно с формальной variables.but, он может достичь с помощью вызова по ссылке, т.е., используя Указательные переменные

+0

@JamesRoot: Я не был бы уверен в этом. OP очень хорошо, похоже, думает об использовании этого для последующих объявлений функций. Но это может быть просто мысль или общее упущение. – Olaf

+1

@JamesRoot задал вопрос «написать функцию типа 'int' в' main' сам ». –

+0

Ах, как плохо, я пропустил эту линию. –

0

В дополнение к @ouah, я обнаружил, что вы можете сделать это с помощью указателей функций. Вот пример:

int i, (*f)(); 
f = (int(*)())&i; 

cout << f << endl; 

Результатом этого будет адрес i.

+0

Приятно, но, строго говоря, это не C из-за cout. –

+0

А, ну, он включил и теги c и C++ –

+0

Это не поддерживается ISO C (указатель на объект-указатель на указатель на функцию), компиляторы могут реализовать его как расширение –

0

Вы можете объявить функцию наряду с переменной:

int fgetc(FILE*), getc(FILE*), errno; 

, но вы не можете определить функцию наряду с переменной в качестве правил производства для определения функций (см ISO 9899: 2011 §6.9. 1 ¶1) читать

function-definition: 
    declaration-specifiers declarator declaration-list(opt) compound-statement 

declaration-list: 
    declaration 
    declaration-list declaration 
Смежные вопросы