【发布时间】:2019-04-18 19:27:00
【问题描述】:
下面这段代码看起来非常明确和多余,有没有办法在运行时选择变量类型?
if(header->bitsPerSample == 16) {
int sample;
for (int i = 0; i < header->chunkSize - HEADER_SIZE + 8; i += sizeof(sample) * 2) {
fread(&sample, sizeof(sample), 1, fp);
fwrite(&sample, sizeof(sample), 1, new);
fread(&sample, sizeof(sample), 1, fp);
}
} else if(header->bitsPerSample == 8) {
char sample;
for (int i = 0; i < header->chunkSize - HEADER_SIZE + 8; i += sizeof(sample) * 2) {
fread(&sample, sizeof(sample), 1, fp);
fwrite(&sample, sizeof(sample), 1, new);
fread(&sample, sizeof(sample), 1, fp);
}
}
我正在寻找这样的东西:
if(header->bitsPerSample == 16)
sample is of type int
else if(header->bitsPerSample == 8)
sample is of type char
for (int i = 0; i < header->chunkSize - HEADER_SIZE + 8; i += sizeof(sample) * 2) {
fread(&sample, sizeof(sample), 1, fp);
fwrite(&sample, sizeof(sample), 1, new);
fread(&sample, sizeof(sample), 1, fp);
}
【问题讨论】:
-
C 中的类型仅在编译时才知道。你可能想要tagged unions,你会在
struct和union之上构建它们
标签: c syntactic-sugar