C和全局变量/函数

时间:2012-08-30 06:30:15

标签: c header global extern

我正在移植一些我拥有的C ++代码。它在C ++中完美运行,所以我不知道我做错了什么。 我有“a.c”和“b.c”。它们都包含“a.h”,而“b.h”又包含“b.c”。 “extern”中的函数在其头文件中声明(使用a.c关键字),其中一个函数从“printf()”调用。它编译并运行,但呼叫似乎永远不会通过(我甚至将几条 #include "a.h" ... int sSimDisp(void){ buttons(); printf("x = %04d\n", index); ... } int main(){ ... while(1) { sSimDisp(); ... } return 0; } 行用于诊断,但没有任何反应。

我知道我忽略了一些简单的东西,我只是不能把手指放在什么东西上。任何帮助表示赞赏。

编辑:粘贴一些简化的代码: 编辑2:电话通过,有一个库问题需要解决。现在索引变量没有递增,我认为它可能是一个范围问题。

在“a.c”中

    #ifndef a_H_
    #define a_H_
    ...
    #include "b.h"
    #include "c.h"
    int sSimDisp(void);
    int main(void);
    #endif /* a_H_ */

在“a.h”中

    #include "a.h"
    ...
    int index = 0;
    void buttons(){
      printf("Entry to button subroutine.\n");
        index++;
        ...
    }
    void touchscreen(){
    ...
    }

in“b.c”

    #ifndef b_H_
    #define b_H_
    ...
    extern int index;
    //button handler
    void buttons();
    //touch screen handler
    void touchscreen();   
    #endif /* b_H_ */

在“b.h”中

{{1}}

2 个答案:

答案 0 :(得分:0)

你在a.h中声明int main(void)很可能导致未定义的行为。

程序中只能有一个主程序,并且您不会在标题中放置原型。

答案 1 :(得分:0)

我的代码没有错,库真的很高兴。我要抓住这些家伙,我们将对回购的最后更改进行排序。感谢您的帮助,我只是想确保这不是我做错了。