我有一些C代码,我一直在我的Mac上的Xcode工作。然后我想在Windows机器上使用它并用TinyC进行编译。当我运行它时,输出是不同的。不同的编译器,不同的输出?
这可能是由于使用不同的编译器?
谢谢!
EDIT 1
的代码是打开了一个wav文件到所有的样品投入到阵列的简单的脚本。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void read_wav_header(unsigned int *samp_rate, unsigned int *bits_per_samp,
unsigned int *num_samp);
void read_wav_data(int *data, unsigned int samp_rate,
unsigned int bits_per_samp, unsigned int num_samp);
int conv_bit_size(unsigned int in, int bps);
int main(void)
// int read_wav(void)
{
unsigned int samp_rate, bits_per_samp, num_samp;
read_wav_header(&samp_rate, &bits_per_samp, &num_samp);
printf("samp_rate=[%d] bits_per_samp=[%d] num_samp=[%d]\n",
samp_rate, bits_per_samp, num_samp);
int *data = (int *) malloc(num_samp * sizeof(int));
read_wav_data(data, samp_rate, bits_per_samp, num_samp);
unsigned int i;
// for (i = 0; i < num_samp; ++i) {
for (i = 0; i < 100; ++i) {
printf("%d\n", data[i]);
}
return EXIT_SUCCESS;
}
void read_wav_header(unsigned int *samp_rate, unsigned int *bits_per_samp,
unsigned int *num_samp)
{
unsigned char buf[5];
// freopen ("/Users/ericbrotto/Desktop/iPhoneData/tmp/Hack.wav","r",stdin);
freopen ("C:/Documents and Settings/Eric.Brotto/Desktop/Eric_Other/Files/Hack.wav","r",stdin);
/* ChunkID (RIFF for little-endian, RIFX for big-endian) */
fread(buf, 1, 4, stdin);
buf[4] = '\0';
if (strcmp((char*)buf, "RIFF")) exit(EXIT_FAILURE);
/* ChunkSize */
fread(buf, 1, 4, stdin);
/* Format */
fread(buf, 1, 4, stdin);
buf[4] = '\0';
printf("IS THIS WAVE? -->%s<--\n",(char*)buf);
if (strcmp((char*)buf, "WAVE")) exit(EXIT_FAILURE);
/* Subchunk1ID */
fread(buf, 1, 4, stdin);
buf[4] = '\0';
printf("IS THIS fmt? -->%s<--\n",(char*)buf);
if (strcmp((char*)buf, "fmt ")) exit(EXIT_FAILURE);
/* Subchunk1Size (16 for PCM) */
fread(buf, 1, 4, stdin);
if (buf[0] != 16 || buf[1] || buf[2] || buf[3]) exit(EXIT_FAILURE);
/* AudioFormat (PCM = 1, other values indicate compression) */
fread(buf, 1, 2, stdin);
if (buf[0] != 1 || buf[1]) exit(EXIT_FAILURE);
/* NumChannels (Mono = 1, Stereo = 2, etc) */
fread(buf, 1, 2, stdin);
unsigned int num_ch = buf[0] + (buf[1] << 8);
if (num_ch != 1) exit(EXIT_FAILURE);
/* SampleRate (8000, 44100, etc) */
fread(buf, 1, 4, stdin);
*samp_rate = buf[0] + (buf[1] << 8) +
(buf[2] << 16) + (buf[3] << 24);
/* ByteRate (SampleRate * NumChannels * BitsPerSample/8) */
fread(buf, 1, 4, stdin);
const unsigned int byte_rate = buf[0] + (buf[1] << 8) +
(buf[2] << 16) + (buf[3] << 24);
/* BlockAlign (NumChannels * BitsPerSample/8) */
fread(buf, 1, 2, stdin);
const unsigned int block_align = buf[0] + (buf[1] << 8);
/* BitsPerSample */
fread(buf, 1, 2, stdin);
*bits_per_samp = buf[0] + (buf[1] << 8);
if (byte_rate != ((*samp_rate * num_ch * *bits_per_samp) >> 3))
exit(EXIT_FAILURE);
if (block_align != ((num_ch * *bits_per_samp) >> 3))
exit(EXIT_FAILURE);
/* Subchunk2ID */
// fread reads line by line until the end.
fread(buf, 1, 4, stdin);
buf[4] = '\0';
if (strcmp((char*)buf, "data")) exit(EXIT_FAILURE);
/* Subchunk2Size (NumSamples * NumChannels * BitsPerSample/8) */
fread(buf, 1, 4, stdin);
const unsigned int subchunk2_size = buf[0] + (buf[1] << 8) +
(buf[2] << 16) + (buf[3] << 24);
*num_samp = (subchunk2_size << 3)/(
num_ch * *bits_per_samp);
}
void read_wav_data(int *data, unsigned int samp_rate,
unsigned int bits_per_samp, unsigned int num_samp)
{
// freopen ("/Users/ericbrotto/Desktop/iPhoneData/tmp/Hack.wav","r",stdin);
freopen ("C:/Documents and Settings/Eric.Brotto/Desktop/Eric_Other/Files/Hack.wav","r",stdin);
unsigned char buf;
unsigned int i, j;
for (i=0; i < num_samp; ++i) {
unsigned int tmp = 0;
for (j=0; j != bits_per_samp; j+=8) {
fread(&buf, 1, 1, stdin);
tmp += buf << j;
}
data[i] = conv_bit_size(tmp, bits_per_samp);
}
}
int conv_bit_size(unsigned int in, int bps)
{
const unsigned int max = (1 << (bps-1)) - 1;
return in > max ? in - (max<<1) : in; // Supposedly this is not correct: http://ubuntuforums.org/showthread.php?p=10442711
// return in > max ? in - ((max<<1)+2) : in;
}
编辑2
我的Mac它输出阵列中的所有样品(大约-32000到32000之间整数)。在这里,我得到你在图像中看到的输出,然后是几百万个零。
输出是什么,以及代码是什么生成的? – Joe 2011-02-18 13:45:30
完全有可能,它取决于您正在编写的代码,有些代码被认为是“依赖于实现”,这意味着结果会因编译器而异 – vmpstr 2011-02-18 13:45:58
我们还需要输出 – delnan 2011-02-18 13:56:18