Здравствуйте,
Подскажите пожалуйста, в коде есть такая "функция":
file.c:
...
function(any_symbol){
...
}
...
Объявления function нет в хедере. Мне не понятно, какой возвращаемый тип у этой ф-ции. Возможно, void... Но хотелось бы знать точно.
Также any_symbol может быть любым набором символов и gcc выдавать ошибок не будет.
-------------------------
Сергей Ч.
Нижний Новгород
Здравствуйте, ChistovSE, Вы писали:
CSE>Здравствуйте, CSE> Подскажите пожалуйста, в коде есть такая "функция":
CSE>file.c:
CSE>... CSE>function(any_symbol){ CSE>... CSE>} CSE>...
CSE>Объявления function нет в хедере. Мне не понятно, какой возвращаемый тип у этой ф-ции. Возможно, void... Но хотелось бы знать точно. CSE>Также any_symbol может быть любым набором символов и gcc выдавать ошибок не будет.
вот такой он вот С.
скомпилируй, слинкуй, дизассемблируй и глянь на код возврата, согласно конвенциям вызова
Здравствуйте, ilnar, Вы писали:
I>вот такой он вот С. I>скомпилируй, слинкуй, дизассемблируй и глянь на код возврата, согласно конвенциям вызова
А можно по подробней? Я не очень хорошо знаю gdb. Я, полагаю, что с помощью его надо определить код возврата.
-------------------------
Сергей Ч.
Нижний Новгород
Здравствуйте, ChistovSE, Вы писали:
CSE>Здравствуйте, ilnar, Вы писали:
I>>вот такой он вот С. I>>скомпилируй, слинкуй, дизассемблируй и глянь на код возврата, согласно конвенциям вызова CSE> А можно по подробней? Я не очень хорошо знаю gdb. Я, полагаю, что с помощью его надо определить код возврата.
пви не поможет, если исходников функции нет.
ищите где определена функция, в какой либе, потом его и анализируйте.
подробных инструкций у меня нет, за этим в ваш любимый поисковик
Здравствуйте, ilnar, Вы писали:
I>пви не поможет, если исходников функции нет. I>ищите где определена функция, в какой либе, потом его и анализируйте. I>подробных инструкций у меня нет, за этим в ваш любимый поисковик
Так дело то в том, что исходники мне даны. Поэтому и написал, что может gdb как то может помочь...
-------------------------
Сергей Ч.
Нижний Новгород
и всё работает! funtion, конечно, возвращает случайный int, я это printf'ом проверил. Но что с параметрами то делать? Получается, что function принимает любое кол-во параметров ?
-------------------------
Сергей Ч.
Нижний Новгород
Здравствуйте, ChistovSE, Вы писали:
CSE>Здравствуйте, ilnar, Вы писали:
I>>пви не поможет, если исходников функции нет. I>>ищите где определена функция, в какой либе, потом его и анализируйте. I>>подробных инструкций у меня нет, за этим в ваш любимый поисковик
CSE> Так дело то в том, что исходники мне даны. Поэтому и написал, что может gdb как то может помочь...
что тогда мешает посмотреть описание в исходниках этой функции??
Здравствуйте, qqqqq, Вы писали:
Q>В С, такие функции возвращают int
вовсе не обязательно.
int вы получаете изза конвенции возвращаемых значений, и считываете, кажется регистр eax
а что там окажется, возвращаемое значение, или тупо случайный мусор — это надо код смотреть.
что касается параметоров функции, они, акже, согласно конвенции вызова, передаются по определенным правилам, в случае с этой функцией, скорее всего через стек. сколько значений из стека возьмет функция — это снова надо в код взглянуть
если функция берет только 1 параметр, ты хоть 10 других в конце припиши, язык С тебе противиться и строго проверять число параметров не будет, разве что продвинутые компиляторы тебе укажут на твою очепятку
Здравствуйте, ilnar, Вы писали:
I>Здравствуйте, qqqqq, Вы писали:
Q>>В С, такие функции возвращают int
I>вовсе не обязательно. I>int вы получаете изза конвенции возвращаемых значений, и считываете, кажется регистр eax I>а что там окажется, возвращаемое значение, или тупо случайный мусор — это надо код смотреть.
I>что касается параметоров функции, они, акже, согласно конвенции вызова, передаются по определенным правилам, в случае с этой функцией, скорее всего через стек. сколько значений из стека возьмет функция — это снова надо в код взглянуть I>если функция берет только 1 параметр, ты хоть 10 других в конце припиши, язык С тебе противиться и строго проверять число параметров не будет, разве что продвинутые компиляторы тебе укажут на твою очепятку
Она может берет только первый параметер, а остальные игнорирует. Как ты эту функцию определил в своем коде, там где main(), случайно не как extern funtion();? И что такое any_symbol?
Вот пожалуйста это компилируется но только один аргумент используется
Файл 1:
Здравствуйте, ChistovSE, Вы писали:
CSE>Объявления function нет в хедере. Мне не понятно, какой возвращаемый тип у этой ф-ции. Возможно, void... Но хотелось бы знать точно. CSE>Также any_symbol может быть любым набором символов и gcc выдавать ошибок не будет.
Во народ пошел! Совсем вы со своими плюсами забыли языки для настоящих мужчин
Если тип возвращаемого значения явно не указан, подразумевается int. При этом, однако, функция может и вовсе не возвращать ничего — слово void придумано слабаками значительно позже. Соответственно, компилятор в этом случае не помешает использовать "возвращенное" значение в точке вызова (поскольку знать не знает, возвращалось оно или нет), но заместо осмысленного значения там будет какой-то произвольный мусор.
Типы параметров, опять же, могут быть не описаны — в таком случае подразумевается int.
Здравствуйте, ChistovSE, Вы писали:
CSE>и всё работает! funtion, конечно, возвращает случайный int, я это printf'ом проверил. Но что с параметрами то делать? Получается, что function принимает любое кол-во параметров ?
Функция принимает столько параметров и таких, сколько ей положено создателем. Однако компилятор в точке вызова ничего про это не знает, и по этому поводу с диагностикой не лезет. И это ваша забота передать правильное число параметров правильного типа.
Здравствуйте, ChistovSE, Вы писали:
CSE>и всё работает! funtion, конечно, возвращает случайный int, я это printf'ом проверил. Но что с параметрами то делать? Получается, что function принимает любое кол-во параметров ?
а у тебя не возникало вопросов как работает сам printf?
в k&r C прототипов не было вовсе, а все функции имели тип int(...), выражаясь современным языком. и сейчас afaik при отсутствии прототипа/объявления функции присваивается этот тип