В чем разница
От: Nortsx  
Дата: 06.07.11 20:25
Оценка:
Опрос по Си. Вопрос — чем отличается два объявления функций.
int get_data(int reference, double *scaleFactor)
{
}

int get_data(reference, scaleFactor)
int reference
double *scaleFactor
{
}


В чем разница то?
Re: В чем разница
От: breee breee  
Дата: 06.07.11 20:37
Оценка:
Здравствуйте, 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, то ли вовсе запрещен.
Re: В чем разница
От: Tilir Россия http://tilir.livejournal.com
Дата: 06.07.11 21:25
Оценка: -2
Здравствуйте, 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;
}

То такая форма, разумеется не является ни устаревшей, ни, запрещённой стандартом, как вам сейчас расскажут. Она всего лишь не является объявлением прототипа. При дальнейших вызовах, конверсии аргументов не будет.
Re[2]: В чем разница
От: Nortsx  
Дата: 07.07.11 04:37
Оценка:
Здравствуйте, Tilir, Вы писали:

Спасибо. Скачал описание стандарта сижу учу наизусть)

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>То такая форма, разумеется не является ни устаревшей, ни, запрещённой стандартом, как вам сейчас расскажут. Она всего лишь не является объявлением прототипа. При дальнейших вызовах, конверсии аргументов не будет.
Re[2]: В чем разница
От: igna Россия  
Дата: 07.07.11 05:57
Оценка:
Здравствуйте, 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.

Re: Вдогонку
От: Nortsx  
Дата: 07.07.11 14:23
Оценка: :))
Почему такая структура может быть неэффективна?
struct test
{
int a;
double b;
int c;
char d;
int e;
char buf[3];
}

И как можно это оптимизировать. Я не вижу косяков никаких например.
Re[2]: Вдогонку
От: LaptevVV Россия  
Дата: 07.07.11 14:42
Оценка:
Здравствуйте, 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>И как можно это оптимизировать. Я не вижу косяков никаких например.

Выравнивание — помедитируйте на это слово.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: В чем разница
От: Tilir Россия http://tilir.livejournal.com
Дата: 07.07.11 16:44
Оценка: -1
Здравствуйте, igna, Вы писали:

I>

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.
Re[4]: В чем разница
От: igna Россия  
Дата: 07.07.11 18:06
Оценка:
Здравствуйте, Tilir, Вы писали:

T>Мне всегда казалось, этот параграф стандарта не про то.


Про то, там же написано "not prototype-format parameter type declarators".
Re[2]: Вдогонку
От: Shellac  
Дата: 07.07.11 19:44
Оценка:
Здравствуйте, 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 заканчивается
Re[3]: Вдогонку
От: Nortsx  
Дата: 07.07.11 20:16
Оценка:
Именно туда
Кстати если есть опыт, как оно там?
Ответил в силу своих знаний на этот вопрос в общем то. Подумал шире))

Здравствуйте, 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 заканчивается
Re[4]: Вдогонку
От: Shellac  
Дата: 07.07.11 21:31
Оценка:
Здравствуйте, Nortsx, Вы писали:

N>Именно туда

N>Кстати если есть опыт, как оно там?
N>Ответил в силу своих знаний на этот вопрос в общем то. Подумал шире))

К сожалению, свежей информацией не владею, извини удачи.
Re[3]: В чем разница
От: Олег К.  
Дата: 09.07.11 01:00
Оценка:
N>Спасибо. Скачал описание стандарта сижу учу наизусть)

Это где ты его скачал? Тут в соседнем топике народ сошелся во мнении что стандарт ANSI C 89-го года не скачать в сети.
Re[4]: В чем разница
От: Nortsx  
Дата: 09.07.11 10:57
Оценка:
Здравствуйте, Олег К., Вы писали:

N>>Спасибо. Скачал описание стандарта сижу учу наизусть)


ОК>Это где ты его скачал? Тут в соседнем топике народ сошелся во мнении что стандарт ANSI C 89-го года не скачать в сети.


Вбил в гугле
Стандарт C99
Сработало
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.