这样不允许么·····算不算潜套定义

#include
int main()
{void print(int i);
int i;
i=1;
print(i);
return 0;
}

void print(int i)
{char a[i]={'x'};
printf("%c",a[0]);
}

char a[i]=['x'];这样的定义是有问题的,数组的大小在定义的时候是需要指定的,因而需要先定义一个数组再将'x'这个字符赋值给指定数组的位置。
同时数组赋值的格式也有错误。应直接a[i]='x'

char a[i]={'x'}; C++11前都是不支持变长数组的.
要看你的编译器是哪个版本, 支持C++哪个版本的标准.

要看你的目的是什么, 要写什么样的程序, 然后才好修改.

不算重定义,那个print函数在主函数里面出现属于声明,后一个属于调用;而且你那个print函数体的内容也有些问题。这些都是毛病,开发时候要尽量规避这些问题。