正在使用.wav文件。。。
*ptr_8和*ptr_16—指向样本数组的指针。
我想让程序根据头的数据声明这些指针(如果8位示例--->declare*ptr_8…)
if ( hdr.S1.BitsPerSample == 8 ) // Declaring array for samples. Depending
// on header's data (8 or 16 bits).
unsigned char *ptr_8;
else
if ( hdr.S1.BitsPerSample == 16 )
unsigned short *ptr_16;
问题是它写:
error: expected expression before 'unsigned'
两行(其中
*ptr_8
和*ptr_16
必须声明),但我看不出这种行为的原因。请告诉我怎么了。
更新:
事实证明,声明是一个编译时概念(见下面接受的答案)。
编译时已声明变量,因此它会占用计算机的资源一次,然后(在编译应用程序时)它们都已在其中声明这意味着这是试图优化程序的最坏方法之一。。。
最佳答案
不能基于运行时条件有条件地声明变量:必须无条件地声明这两个变量,即使其余代码将只使用其中一个。
使声明有条件的唯一方法是使用预处理器的条件编译,它看起来不适用,因为您的条件基于文件的头,所以它显然是一个运行时编译。
您可以将处理放在if
的两个分支中,如下所示:
if (hdr.S1.BitsPerSample == 16) {
unsigned short *ptr_16;
// Use ptr_16 here
} else if (hdr.S1.BitsPerSample == 8) {
unsigned char *ptr_8;
// Use ptr_8 here
}
// Neither ptr_16 nor ptr_8 is available here
关于c - 错误:“未签名”之前的预期表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16568615/