正在使用.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/

10-12 07:29