【发布时间】:2015-12-08 20:30:47
【问题描述】:
我在我的项目中遇到了一些奇怪的 gcc 警告。让我们看一下这个简单的 3 个文件中的示例:
struct.h
typedef struct {
int a;
long b;
char *c;
} myStruct;
func.c
#include <stdio.h>
#include <stdlib.h>
#include "struct.h"
myStruct* func() {
myStruct* new = (myStruct*) malloc(sizeof(myStruct));
new->a = 42;
new->b = 84;
new->c = "lol_ok\n";
return new;
}
void prn(myStruct* x) {
printf("%d\n", x->a);
}
main.c
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include "struct.h"
int main() {
myStruct* ms = func();
prn(ms);
return 0;
}
所以我收到以下警告:
main.c: In function ‘main’:
main.c:8:24: warning: initialization makes pointer from integer without a cast
myStruct* ms = func();
此外,当我使用 -Wall -Wextra 构建它时,我会得到更多:
main.c: In function ‘main’:
main.c:8:9: warning: implicit declaration of function ‘func’ [-Wimplicit-function-declaration]
myStruct* ms = func();
^
main.c:8:24: warning: initialization makes pointer from integer without a cast
myStruct* ms = func();
^
main.c:9:2: warning: implicit declaration of function ‘prn’ [-Wimplicit-function-declaration]
prn(ms);
这一切意味着什么?如果使用-fsanitize=undefined -fsanitize=address 构建,它也会崩溃,这很奇怪。为什么?
【问题讨论】:
标签: c gcc compiler-warnings