Здравствуйте, Nortsx, Вы писали:
N>Опрос по Си. Вопрос — чем отличается два объявления функций. N> int get_data(int reference, double *scaleFactor) N> { N> }
N> int get_data(reference, scaleFactor) N> int reference N> double *scaleFactor N> { N> }
N>В чем разница то?
Второй вариант устаревший. В последнем стандарте Си он то ли deprecated, то ли вовсе запрещен.
Здравствуйте, Nortsx, Вы писали:
N>Опрос по Си. Вопрос — чем отличается два объявления функций. N> int get_data(int reference, double *scaleFactor) N> { N> }
N> int get_data(reference, scaleFactor) N> int reference N> double *scaleFactor N> { N> }
N>В чем разница то?
Стандарт C99, 6.9.2.13, читать, учить наизусть.
Вкратце дело обстоит так: если вы объявляете
extern int max(int a, int b)
{
return a > b ? a : b;
}
То эта форма является также объявлением прототипа extern int max(int a, int b) и при последующих вызовах max, его аргументы будут приводится к (int, int). В случае же, если вы пишете реализацию:
extern int max(a, b)
int a, b;
{
return a > b ? a : b;
}
То такая форма, разумеется не является ни устаревшей, ни, запрещённой стандартом, как вам сейчас расскажут. Она всего лишь не является объявлением прототипа. При дальнейших вызовах, конверсии аргументов не будет.
Спасибо. Скачал описание стандарта сижу учу наизусть)
T>Здравствуйте, Nortsx, Вы писали:
N>>Опрос по Си. Вопрос — чем отличается два объявления функций. N>> int get_data(int reference, double *scaleFactor) N>> { N>> }
N>> int get_data(reference, scaleFactor) N>> int reference N>> double *scaleFactor N>> { N>> }
N>>В чем разница то?
T>Стандарт C99, 6.9.2.13, читать, учить наизусть.
T>Вкратце дело обстоит так: если вы объявляете
T>extern int max(int a, int b) T>{ T> return a > b ? a : b; T>}
T>То эта форма является также объявлением прототипа extern int max(int a, int b) и при последующих вызовах max, его аргументы будут приводится к (int, int). В случае же, если вы пишете реализацию:
T>extern int max(a, b) T>int a, b; T>{ T>return a > b ? a : b; T>}
T>То такая форма, разумеется не является ни устаревшей, ни, запрещённой стандартом, как вам сейчас расскажут. Она всего лишь не является объявлением прототипа. При дальнейших вызовах, конверсии аргументов не будет.
Здравствуйте, Tilir, Вы писали:
T>То такая форма, разумеется не является ни устаревшей, ни, запрещённой стандартом, ...
Но является устаревающей:
6.11.6 Function declarators
1 The use of function declarators with empty parentheses (not prototype-format parameter
type declarators) is an obsolescent feature.
Здравствуйте, Nortsx, Вы писали:
N>Почему такая структура может быть неэффективна? N>struct test N>{ N>int a; N>double b; N>int c; N>char d; N>int e; N>char buf[3]; N>}
N>И как можно это оптимизировать. Я не вижу косяков никаких например.
Выравнивание — помедитируйте на это слово.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
I>6.11.6 Function declarators
I>1 The use of function declarators with empty parentheses (not prototype-format parameter
I>type declarators) is an obsolescent feature.
Не является. Мне всегда казалось, этот параграф стандарта не про то. Он про объявления вида
int f();
Про которые не всегда поймёшь то ли они
int f(void);
то ли
int f(...);
И их obsolescence кажется мне глубоко верным. Но всё равно даже их не вырежут из стандарта -- на это завязаны тонны кода. Максимум -- ну пометят obsolette.
Здравствуйте, Nortsx, Вы писали:
N>Почему такая структура может быть неэффективна? N>struct test N>{ N>int a; N>double b; N>int c; N>char d; N>int e; N>char buf[3]; N>}
N>И как можно это оптимизировать. Я не вижу косяков никаких например.
Узнаю задание с собеседования в контору, название которой на C начинается, на E заканчивается
Именно туда
Кстати если есть опыт, как оно там?
Ответил в силу своих знаний на этот вопрос в общем то. Подумал шире))
Здравствуйте, Shellac, Вы писали:
S>Здравствуйте, Nortsx, Вы писали:
N>>Почему такая структура может быть неэффективна? N>>struct test N>>{ N>>int a; N>>double b; N>>int c; N>>char d; N>>int e; N>>char buf[3]; N>>}
N>>И как можно это оптимизировать. Я не вижу косяков никаких например.
S>Узнаю задание с собеседования в контору, название которой на C начинается, на E заканчивается
Здравствуйте, Nortsx, Вы писали:
N>Именно туда N>Кстати если есть опыт, как оно там? N>Ответил в силу своих знаний на этот вопрос в общем то. Подумал шире))
К сожалению, свежей информацией не владею, извини удачи.
Здравствуйте, Олег К., Вы писали:
N>>Спасибо. Скачал описание стандарта сижу учу наизусть)
ОК>Это где ты его скачал? Тут в соседнем топике народ сошелся во мнении что стандарт ANSI C 89-го года не скачать в сети.