如何正确初始化指针

时间:2011-07-21 15:54:42

标签: c visual-studio-2010 function pointers

我有以下代码调用函数uint32_pack。该程序在Dev-C ++中编译时没有错误,但是当'tag'是偶数时,不会产生正确的结果。在Visual Studio中,程序编译但产生错误,我猜这些错误是为什么当'tag'是偶数时我没有得到正确的输出。我仍然试图绕过指针,我不确定在宣布它们时我出错了。谢谢你的帮助。

以下是错误来自的代码:

 1  int uint32_pack (uint8_t *fieldnumber, uint32_t value, uint8_t *out);
 2  int main(){
 3  uint32_t initvalue = 2;
 4  int return_rv;  
 5  uint8_t *tag = (uint8_t *) malloc(sizeof(uint8_t));
 6  *tag = 38;
 7  uint8_t *tempout= (uint8_t *) malloc(30);
 8  return_rv = uint32_pack (tag, initvalue, tempout);
 9  free(tempout);
10  free(tag);
11  }

VS的错误如下:

error C2143: syntax error : missing ';' before 'type' (on line 7)
error C2065: 'tempout' : undeclared identifier        (on line 8)
warning C4047: 'function' : 'unsigned char *' differs in levels of indirection from 'int' (on line 8)
warning C4024: 'uint32_pack' : different types for formal and actual parameter 3 (on line 8) 
error C2065: 'tempout' : undeclared identifier  (on line 9)
warning C4022: 'free' : pointer mismatch for actual parameter 1 (on line 9)

2 个答案:

答案 0 :(得分:2)

最后三个错误是第二个错误的结果,第二个错误是第一个错误的结果。这只留下了第一个和第三个无法解释的原因。

发生第一个错误是因为您使用的是C89而不是C ++或C99;你不能在C89中的代码之后声明变量。

颠倒第6行和第7行的顺序,你可能应该没问题。 (我认为第三个错误也是第一个错误的结果,但这不是确定的。)

答案 1 :(得分:1)

这里可能存在几个不同的问题。除非您有一个声明这些整数类型的自定义标头,否则<integer>_t类型在标准标头stdint.h中声明。 Visual Studio不附带此标头,因此它不知道这些类型是什么。如果你谷歌它,你可以找到stdint.h的实现。

如果您的文件具有.c扩展名,Visual Studio会默认将其编译为C文件。此外,它不支持C99语法,因此您无法在可执行代码中声明变量。将所有声明移动到函数的开头,或强制VS将文件编译为C ++。要执行后者,请重命名文件,或者在文件属性中有一个允许您这样做的选项。

相关问题