以下函数给出了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中的某些设置允许在函数中间声明变量?
答案 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 */
这些修改可以安全地被认为是化妆品。