У меня есть функция, void funct (struct *B)
. Он будет вызываться некоторыми примерами struct A
. Он принимает только указатель на strut B и модифицирует экземпляр struct B. Если struct A имеет char *name
. Мой вопрос: могу ли я получить доступ к A_instance->name
? в funct
? Если да, то как? СпасибоКак я могу получить информацию о вызывающем абоненте функции в C?
ответ
Вы говорите, что это C, который выходит из функции-члены (C не имеет функции-члены, классы и т.д.). Это означает, что funct - это просто функция (не член чего-то), и поэтому у вас есть только информация, которая передается, и глобальные переменные. Поскольку ни одна из этих вещей не содержит то, что вы хотите, вы не можете ее получить.
Однако вы также говорите, что funct вызывается «некоторыми экземплярами структуры A». Это не имеет никакого смысла, потому что в структурах C нет функций-членов, и поэтому они не могут совершать вызовы. Либо вы имеете в виду, что операции над некоторыми экземплярами структуры A вызывают функцию (в этом случае применяется мой первый ответ), либо вы действительно работаете с C++, и у вас есть функции-члены в структуре A.
Если функция является функцией-членом структуры A, тогда функция имеет полный доступ ко всем членам экземпляра A, которые ее вызвали, и поэтому может напрямую проверить «имя». В противном случае мы вернемся к моему первому ответу.
Чтобы исправить это, вам понадобится функция funct, чтобы быть функцией-членом struct A (тем самым перейдя на C++), или вам понадобится передать соответствующую информацию в функцию.
Это звучит, как вы пытаетесь написать функцию, которая должна обработать значение name
которое присутствует в 2-х разных структур: struct A
и struct A
. Если это так, то почему бы не взять char*
непосредственно в функции и позвонить ли вызывающим абонентам соответствующее поле name
?
funct(char * name) {
..
}
funct(aInstance->name);
funct(bInstance->name);
Почему вы и другие считают необходимым перескакивать с предположениями, когда кто-то может немного подгонять вопросника, чтобы сформулировать его вопрос более точно, на благо всех? – 2010-01-20 21:44:32
интерфейс функции исправлен. он принимает только структуру B * – derrdji
@Neil, habbit.Я нахожу, что неправильный ответ скорее подскажет разъяснение вопроса, чем комментирует исходный вопрос. Возьмем этот пример, О.П. прокомментировал разъяснение ~ 3 минуты после моего ответа. – JaredPar
Я боюсь, что C не позволяет вам получить доступ к данным вызывающих функций. Проще всего было бы просто передать указатель на «А структура», по крайней мере, тогда вы всегда будете иметь доступ к А.
void func(struct B* b_ptr, struct A* a_ptr)
{
/* ... */
/* do whatever you like with a_ptr->name */
}
Если у вас есть программа, как что:
struct B {
int dummy;
}
struct A {
char *name;
struct B* b;
}
void funcA (struct A* a) {
funcB (a->b);
}
void funcB (struct B* b) {
/* do something */
}
и вы хотите узнать что-то о a
в funcB
, нет правильного способа сделать это. То, что вы может попытаться сделать, используя указатели арифметические или отрицательные индексы массива, до угадать местоположение a
в стеке, что может даже работать с данным компилятором на данной платформе. Если вы сделаете так, пожалуйста, не забудьте опубликовать решение по адресу The Daily WTF.
- 1. PHP file_get_contents: Получить информацию о вызывающем абоненте
- 2. Как узнать информацию о вызывающем абоненте?
- 3. Как получить информацию о вызывающем абоненте - идентификатор ячейки?
- 4. Получить DLL-информацию о вызывающем абоненте в Delphi
- 5. информация о вызывающем абоненте метода
- 6. Как узнать информацию о вызывающем абоненте в приложении Cocoa?
- 7. Информация о вызывающем абоненте в Java
- 8. Как сохранить информацию о вызывающем абоненте при обертке NLog
- 9. Быстрый доступ к информации о вызывающем абоненте
- 10. Как использовать проверку, чтобы получить информацию о вызывающем абоненте от вызываемого абонента в Python?
- 11. Как получить информацию о вызывающем абоненте SIP под библиотекой sroid sip
- 12. Переопределение «новых» и протоколирование данных о вызывающем абоненте
- 13. C++ Peeking at the stack для информации о вызывающем абоненте
- 14. Примеры решений с использованием C# 5 информации о вызывающем абоненте
- 15. Может ли NLog сохранять информацию о вызывающем абоненте с помощью методов расширения C#?
- 16. Невозможно получить и сохранить информацию о вызывающем абоненте во время звонка
- 17. Производительность с использованием атрибутов информации о вызывающем абоненте
- 18. Как я могу сделать TDD с атрибутами информации о вызывающем абоненте?
- 19. Извлечение уникальной информации о вызывающем абоненте в java
- 20. Как я могу получить информацию о компьютерах?
- 21. Альтернативы erlang: get_stacktrace/0 для получения информации о вызывающем абоненте функции?
- 22. Как использовать ключевое слово params вместе с информацией о вызывающем абоненте в C#?
- 23. IP-телефон Cisco обнаруживает входящие звонки и информацию о вызывающем абоненте
- 24. Как найти информацию об абоненте?
- 25. VB: получить скомпилированную информацию о вызывающем приложении DLL; COM-безопасность
- 26. Могу ли я получить информацию о функции (return/parameter type) в другой функции с C++?
- 27. Могу ли я получить информацию о приложениях?
- 28. Получить информацию о функции caller
- 29. Как получить информацию о функции в ActionScript?
- 30. Получить информацию о вызове функции
Структуры не могут ничего назвать. Пожалуйста, разместите код, который иллюстрирует то, о чем вы просите. – 2010-01-20 21:40:53
Что это значит, что это «вызвано некоторыми примерами»? –
Функция будет вызываться в других функциях – derrdji