错误C2065:'i':VS2012中未声明的标识符,但不是Mac

时间:2013-11-30 21:32:58

标签: c visual-studio-2012

以下函数给出了undeclared identifier错误。

注意在函数中间声明的变量i(第8行):

int
mb_convert_to_offsets( MemBuf *mb)
{
    _check( mb);
    if (mb->size != sizeof( intptr_t))
        return eInvalid;
    intptr_t *tb = (intptr_t*)mb->data;
    int i;
    char *s, *s0 = (char *)(tb + mb->n);
    for (i = 0; i < mb->n; i++) {
        s = (char *)tb[i];
...

但是,如果我在方法的第一个声明变量,我没有错误:

int
mb_convert_to_offsets( MemBuf *mb)
{
    int i;
    _check( mb);
    if (mb->size != sizeof( intptr_t))
        return eInvalid;
    intptr_t *tb = (intptr_t*)mb->data;
    char *s, *s0 = (char *)(tb + mb->n);
    for (i = 0; i < mb->n; i++) {
        s = (char *)tb[i];
...

我现在已经为Microsoft了解C99 and C11 standards in VS2012 are not a priority

然而,我正在转换一堆来自Mac的代码,这种代码风格很普遍,而且我不必重构所有代码。

代码中是否有任何变通方法或Visual Studio中的某些设置允许在函数中间声明变量?

1 个答案:

答案 0 :(得分:2)

虽然有些工作,但是直接安静的是添加一个新的上下文,其中定义出现在现有上下文的中间。

所以你的代码片段就像这样:

int
mb_convert_to_offsets( MemBuf *mb)
{
  _check( mb);
  if (mb->size != sizeof( intptr_t))
    return eInvalid;
  { /* addition */
    intptr_t *tb = (intptr_t*)mb->data;
    int i;
    char *s, *s0 = (char *)(tb + mb->n);
    for (i = 0; i < mb->n; i++) 
    {
      s = (char *)tb[i];

      ...

    }

    ...
  } /* addition */

这些修改可以安全地被认为是化妆品。