问:编译并运行如下代码,符合预期吗?
file1.c
#include <stdint.h>
uint64_t func1(void)
{
return 0x1122334455667788;
}
file2.c
#include <stdio.h>
#include <stdint.h>
int main(int argc, char* argv[])
{
printf("0x%lX\r\n", func1());
return 0;
}
答:编译时会报警告:warning: implicit declaration of function ‘func1’。执行时输出:0x55667788。
问:函数func1明明返回的是0x1122334455667788,为什么输出少了4个字节?
答:file2.c里没有func1的声明,编译器默认func1的返回值是int类型。
问:如何解决?
答:在调用func1的文件里完整的声明func1。可按如下方案修改:
file1.c
#include <stdint.h>
uint64_t func1(void)
{
return 0x1122334455667788;
}
file1.h
#ifndef __FILE1_H__
#define __FILE1_H__
#include <stdint.h>
extern uint64_t func1(void);
#endif
file2.c
#include <stdio.h>
#include <stdint.h>
#include "file1.h"
int main(int argc, char* argv[])
{
printf("0x%lX\r\n", func1());
return 0;
}