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 ==========
答案 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的另一个选项,无需将变量声明移动到函数顶部,但它可能会引发代码中的其他问题。