我知道這個問題有一個C++版本,但是我使用標準的typedefs而不是模板。C運行時條件typedef
我寫了一個程序,可以使用16位的wav文件。它通過將每個樣本加載到一個短文中來完成。程序然後對短路進行算術運算。
我現在正在修改程序,以便它可以同時使用16位和32位wav。我希望做一個條件typedef,即使用16位的short和32位的int。但後來我意識到,如果編譯器事先不知道變量的類型,編譯器可能不會編譯代碼。
於是,我就考出了下面的代碼:
#include <stdio.h>
int
main()
{
int i;
scanf("%i", &i);
typedef short test;
if(i == 1)
typedef short sample;
else
typedef int sample;
return 0;
}
,並得到了以下編譯器錯誤:
dt.c: In function ‘main’:
dt.c:12:5: error: expected expression before ‘typedef’
dt.c:14:5: error: expected expression before ‘typedef’
這是否意味着用C是運行條件的typedef是不可能的?
[開放式問題:]如果不是,你們將如何處理這樣的事情?
是的,運行時typedefs是不可能的。編譯器需要爲'sample s;'分配存儲空間,因爲它必須知道大小。 – 2012-07-18 12:25:52
考慮使用''(和/或'')和'uint16_t'和'int32_t'等等。當然這是來自C99,但即使是逆行編譯器通常也提供工具(或者可以提供頭文件)。 –
2012-07-18 13:11:23