我现在有一个严重的问题,真的很想找出根本原因是什么。
函数源文件:
//function.c
#include "function.h"
void FunctionA (int tiFrame)
{
printf ("%d", tiFrame);
}
函数头文件:
//function.h
extern void FunctionA (int tiFrame);
一个愚蠢的外部头文件:
// stupid.h
#define tiFrame TIFRAME
应用:
//application.c
#include "stupid.h"
#include "function.h"
void App2 ()
{
FunctionA (10);
}
结果:FunctionA 总是打印“0”(零值)!
现在,我更改了应用程序文件:
//application.c
#include "function.h"
#include "stupid.h"
void App2 ()
{
FunctionA (10);
}
结果:FunctionA 总是打印“10”(正确!)!
有人知道根本原因吗?
最佳答案
从“stupid.h” header 泄漏的#define 与您的函数定义发生冲突。
您可以插入一个 printf 来查找 TIFRAME 的值...
printf("%d\n", TIFRAME);
或者,更巧妙地,使用符号粘贴将 TIFRAME 转换为字符串...
或者,只是修复/避免。您在此处包含的“stupid.h”扩展了 tiFrame 的#define ...
#define tiFrame TIFRAME
所以,避免这种碰撞,
//function.c
#include "function.h"
void FunctionA (int arg_tiFrame)
{
printf ("%d", arg_tiFrame);
}
你甚至不需要在这里提及参数名称,
//function.h
extern void FunctionA (int);
或者,您可以在函数之前取消定义 tiFrame...
//stupid.h declares tiFrame, gotta avoid that
#define CleverAvoidance tiFrame
#undef tiFrame
//function.c
#include "function.h"
void FunctionA (int tiFrame)
{
printf ("%d", tiFrame);
}
//and put it back the way it was, or just fugeddaboudit
#define tiFrame CleverAvoidance
关于C语言 : Header inclusion makes unexpected behavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21925234/