C 警告:函数声明中的参数名称(无类型)[默认启用]

C 警告:函数声明中的参数名称(无类型)[默认启用],c,gcc,function-pointers,C,Gcc,Function Pointers,此typedef工作: typedef void (*mem_deallocator)(void*); 然而这一个 typedef void* (*mem_allocator)(size_t); 发出警告: 警告:函数声明中的参数名称(无类型)[默认启用] 我正在使用GCC4.8.1,并且正在使用-c-Wall进行编译 如何修复代码,使我不再收到警告?size\u t在以下标题中定义,您需要至少包含其中一个标题 #include <stddef.h> #include <s

此typedef工作:

typedef void (*mem_deallocator)(void*);
然而这一个

typedef void* (*mem_allocator)(size_t);
发出警告:

警告:函数声明中的参数名称(无类型)[默认启用]

我正在使用GCC4.8.1,并且正在使用
-c-Wall
进行编译


如何修复代码,使我不再收到警告?

size\u t
在以下标题中定义,您需要至少包含其中一个标题

#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <wchar.h>   //since C99
#include <uchar.h>   //since C11
#包括
#包括
#包括
#包括
#包括
#包括//自C99起
#包括//自C11起

#包括
或stddef.h,我想。@Mat stddef.h就是这样!谢谢不,没有。如果一个参数定义只有“一个单词”,它应该找出它的类型,而不是名称,并相应地出错。我搜索了整个标准,以确保这是整个标题列表,希望如此。谢谢,回答得很好,stddef.h是我认为最严格的。我将在几分钟内接受答案。@Flavius:g++将给出真正的错误:“'size\t'未在此范围内声明”@Flavius:在没有可见声明的情况下,
size\t
只是一个普通标识符,普通标识符不能是类型名。typedef必须经过特殊处理,实际上成为上下文敏感的关键字。解析C很难。