2010-09-04 69 views
1

标题几乎可以说明一切。这似乎是它的根的精确错误信息是:C标题在包含在某些文件中时会导致错误,但不包括在其他文件中

util.h:4: error: expected declaration specifiers or ‘...’ before ‘size_t’

有问题的标题是:

#ifndef UTIL_H 
#define UTIL_H 

void print_array(void*, int, size_t, void (*)(void*)); 
extern void print_int(void*); 
extern void print_float(void*); 

#endif /* UTIL_H */ 

如果我编译以下文件与gcc -Wall -c util.c编译器静默创建目标文件。

#include <stdio.h> 
#include "util.h" 

void print_array(void* a, int length, size_t size, void (*print)(void*)) { 
    unsigned int i; 
    for (i = 0; i < length; i++) { 
    print(a + i*(unsigned int)size); 
    } 
    printf("\n"); 
} 

void print_int(void* i) { 
    int* a = (int*) i; 
    printf(" %i ", *a); 
} 

void print_float(void* f) { 
    float* a = (float*) f; 
    printf(" %f ", *a); 
} 

如果我将它与任何其他文件包含在一起,我会得到上述错误和其他一些错误。我提供的是第一个。我在Google上搜索的所有内容都表明,这是前一行语法错误的结果,但是当文件中的第一行正在发生。我可以看到,如果我得到这个错误被淘汰,那么所有其他的将会消失,因为他们必须处理与print_array被调用的错误数量或类型的参数(它不是)。

回答

3

size_t直到包含stddef.h才被定义。您的标题应该首先包含该标题以确保其定义。 (就目前而言,你只是变得“幸运”,并且拥有其他包含,最终将其定义为首先包含它,因此不会导致问题。)

+0

oi这是令人尴尬的。我必须等待十分钟才能接受你的回答。如果任何人作为代表备用,我应该得到一个或两个这样的倒退。 – aaronasterling 2010-09-04 06:43:47

+1

@aaronasterling,不要流汗。有时候编程的最佳部分是当你在同一时间感觉聪明和愚蠢。 ;-) – 2010-09-04 06:48:21

+0

'size_t'的''呢? – 2011-12-18 16:35:23

相关问题