inttypes.h标题问题

时间:2014-10-29 18:09:52

标签: c visual-c++

nb:由于评论,这个问题已经减少了很多次。 现在下面列出了产​​生错误的最小代码量。 inttypes.h文件是从这里下载的:ffMPEG "inttypes.h not found" error),这被认为是最初的问题。

//tlvlist.c

static int32_t test(somestruct *a);

/* Private method, adds tlv object to the list which contains raw binary data. */
int32_t int32_t test(somestruct *a)
{
    /* Some checks */
    if(a == NULL || bytes == NULL)
        return -1;

    /* Check if list is full */
    if(a->used == MAX_LIST_SIZE)
        return -1;

    /* Index to first free element in the list */
    int iIndex = a->used;

    // ...

    return 0;
}

错误:

 tlvlist.c
c:\users\documents\visual studio 2012\projects\tlv list\tlv list\tlvlist.c(21): error C2143: syntax error : missing ';' before 'type'
c:\users\documents\visual studio 2012\projects\tlv list\tlv list\tlvlist.c(23): error C2065: 'iIndex' : undeclared identifier
c:\users\documents\visual studio 2012\projects\tlv list\tlv list\tlvlist.c(24): error C2065: 'iIndex' : undeclared identifier
c:\users\documents\visual studio 2012\projects\tlv list\tlv list\tlvlist.c(28): error C2065: 'iIndex' : undeclared identifier
c:\users\documents\visual studio 2012\projects\tlv list\tlv list\tlvlist.c(29): error C2065: 'iIndex' : undeclared identifier
c:\users\documents\visual studio 2012\projects\tlv list\tlv list\tlvlist.c(32): error C2065: 'iIndex' : undeclared identifier
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

1 个答案:

答案 0 :(得分:0)

显然,在MSVS中编译C文件时,您需要在任何语句之前的函数开头都有所有变量声明。例如:

int32_t Tlvlist_AddRawt(Tlvlist *a, uint8_t type, uint16_t size, const void *bytes)
{
    /* Index to first free element in the list */
    int iIndex;

    /* Some checks */
    if(a == NULL || bytes == NULL)
        return -1;

    iIndex = a->used;

    ...
}

我相信这是旧的C89格式,大多数C编译器现在使用C99(或更高版本),这将允许函数中的任何位置的变量声明。将文件重命名为CPP是MSVS的另一个选项,无需将变量声明移动到函数顶部,但它可能会引发代码中的其他问题。