0

我正在移植我拥有的一些 C++ 代码。它在 C++ 中完美运行,所以我不知道我做错了什么。我有“ a.c”和“ b.c”。它们都包括“ a.h”,而后者又包括“ b.h”。“”中的函数在b.c其头文件中声明(使用extern关键字),其中之一是从“ a.c”调用的。它编译并运行,但调用似乎从未通过(我什至输入了几printf()行进行诊断,但没有任何反应)。

我知道我忽略了一些简单的事情,我只是无法确定是什么。任何帮助表示赞赏。

编辑:粘贴一些简化代码: 编辑 2:调用通过,有一个库问题需要修复。现在索引变量没有增加,我认为这可能是一个范围问题。

在“交流”中

    #include "a.h"
    ...
    int sSimDisp(void){
        buttons();
    printf("x = %04d\n", index);
        ...
    }
    int main(){
    ...
    while(1) {
        sSimDisp();
        ...
    }
    return 0;
    }

在“啊”

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

在“公元前”

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

在“bh”中

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

2 回答 2

0

我的代码没有问题,图书馆真的被抬高了。我要抓住这些家伙,我们将整理对 repo 的最后更改。感谢您的帮助,我只是想确保我没有做错任何事情。

于 2012-08-30T17:20:35.840 回答
0

Your declaration of int main(void) in a.h could well result in undefined behaviour.

There can only be ONE main in a program, and you don't put a prototype in the header.

于 2012-08-30T08:16:06.350 回答