Проблемы с инклюдом

Тема в разделе "LANGS.C", создана пользователем ajak, 2 ноя 2008.

  1. ajak

    ajak New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2007
    Сообщения:
    463
    Привет!!!
    1)У меня есть главный модуль в котором объявлена переменная. И есть ещё один модель. В главном объявлена переменная. ОНа также зедействована в в другом моделу. При компиляции - ругается что перемменная в этом доп. модуле не объявлена. Когда я делаю инклюд главного модуля в дочерний, подключая и компилю, выскакивает такая ошибка.
    Как с этим бороться?
    2) Как передать в функции имя функции, которую я хочу использовать. Приведите пример, плиз. Спасибо.
     
  2. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    ajak
    1) у тебя файл 1 включает файл 2, который включает файл 1, который включает файл 2,...
    Просто объяви переменную как extern и не надо никаких файлов включать.
    2) передать "имя функции" - просто int foo(char *function_name); Но я думаю ты очепятался и хотел сказать "как передать указатель на функцию", если да, то так:
    Код (Text):
    1. int foo(int (*bar)(void)) {
    2.     return bar();
    3. }
    4.  
    5. int eggs(void);
    6.  
    7. int qux(void) {
    8.     return foo(eggs);
    9. }
    з.ы. советую почитать теорию (напр. K&R), а потом переходить к практике.
    з.ы. по поводу 2): в Си ф-ции не first-class объекты, поэтому можно писать "int foo(int bar(void))", вызывать можно "int x = (*bar)()", передавать можно как eggs так и &eggs итп. - дело вкуса, результат один.
     
  3. only

    only New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2008
    Сообщения:
    147
    ajak
    1)
    Напиши примерный код хотя бы, свой или упрощенный, чтобы можно было понять в чем проблема
    Скорее всего это связано с extern, но нужно увидеть код и хидеры: что где определено, объявлено.

    А ошибка видать не та - тут о другом тебе компилятор говорит
    2)
    Это уже объяснил Ra!N
     
  4. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    и так все понятно, файлы рекурсивно включают друг друга. Компиолятор загнулся на 363 уровне. Память кончилась и появился второй еррор, который остановил компиляцию.
     
  5. only

    only New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2008
    Сообщения:
    147
    Интересно, а это разве нормально? Стиль такой?
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    only
    Енто такой стиль от незнания основ, учит ешо человек язык.
     
  7. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    поэтому, я и рекомендую ajak'у сначала выучить язык, а потом писать на нем.