使用 .wav 文件... * ptr_8和* ptr_16 - 指向样本数组的指针。
我想让程序根据标题的数据声明这些指针(如果8 bitsPerSample --->声明* 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
)虽然我没有看到这种行为的原因。
请告诉我有什么问题。
更新
事实证明,声明是一个编译时的概念(见下面接受的答案)。
变量在编译时被声明,所以它需要机器的资源一次然后(当你编译应用程序时)它们都已经在那里声明了。这意味着它是尝试优化程序的最糟糕方式之一......
答案 0 :(得分:5)
您无法根据运行时条件有条件地进行变量声明:必须无条件地声明这两个变量,即使其余代码只使用其中一个。
使声明成为条件的唯一方法是使用预处理器的条件编译,这看起来并不适用,因为你的条件是基于文件的标题,所以它显然是运行时的。
您可以将处理放在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
答案 1 :(得分:1)
为什么你不能只是声明两个指针然后只填充你想要使用的指针?无论如何,问题与范围有关 - 如果你想在if块中声明变量,它需要有大括号,然后变量只在该大括号块内有效。