Member 13261175 Ответов: 4

Предупреждение: избыточные элементы в инициализаторе массива


Привет,

Пока я запускаю код, я получаю следующие сообщения об ошибках.

[КОД]
#include <stdio.h>
#include <math.h>
 
#define COL 204
#define COL_P 2
#define ROWS_P 1020
 
int codecheck(int col,int col_p,int rows_p,int (*h)[2],int x[])
{	int i,j,m,f; //flags
	int sum = 0;
	int y[COL];
	
	for (i=0;i<COL;i++)
	y[i]=0;
	m=1;
	f=-1;
	for(i=0;i<rows_p;)							 
	{			
		for(j=0;j<rows_p;j++)
		{
			if(h[j][0]==m)
			{		
				y[m]=y[m] + x[h[j][1]-1];
					f++;
			}
		}
		y[m]=y[m]%2;
		m=m+1;
		i=f+1;
	}
 
	for (i = 0; i < COL; ++i) 
		{
			sum =sum+ y[i];
		}
	if (sum == 0) 
		{
			return 1;
		}
	else
		{	
			return -1;
		}
				
}
 
int codesum (int y[],int col)
{
    int sum=0;
    for(int i=0;i<COL;i++)
        sum+=y[i];
    //cout<< "sum="<< sum<<endl;
    if(sum>0)
        return 0;
    else
        return 1;
}



void ModulationSchemeValues (int modulationScheme, int noOfSymbols, double var, float d, int col, float rate, double snr)
{
	            switch (modulationScheme)
            {
                case 0:
                    //cout<<"case 0"<<endl;
                    var=1/(2*rate*snr);
                    noOfSymbols = col;
                    d=1;
                    break;
                case 1:
                    //cout<<"case 1"<<endl;
                    var=1/(4*rate*snr);
                    noOfSymbols = col/2;
                    d=1/sqrt(2);
                    break;
                case 2:
                    //cout<<"case 2"<<endl;
                    var=1/(8*rate*snr);
                    noOfSymbols = col/4;
                    d=1/sqrt(10);
                default:
                    var=1/(2*rate*snr);
                    noOfSymbols = col;
                    d=1;
                    break;
            }
}

void InitializeChannelLLR (double var, int modulationScheme, int noOfSymbols, float x[], float noise[], double L_ch[], float d, int rows_p, int (*h)[2], double LLR[])
{
    
    int j=0;   // temporary flags
   int k=0,t;
    for(int i=0;i<noOfSymbols;i++)							// using randnoise function introducing noise to all zero codeword
    {
        
            x[j]=d;
            noise[j]=(x[j])+0.8;
            L_ch[j]= 2*noise[j]/var;
            j++;
       
        
    }

    
    for(int j=0;j<rows_p;j++)
    {
        //cout<<"enter loop"<<endl;
        //cout<< "j="<<j<<endl;  //<<j<<"\t";
        t=h[j][1]-1;
        LLR[j]=L_ch[t];
    }
    //cout<<"L_ch initialize done \n";

}
 
 
void SPADecoder(int rows_p, double LLR[], int (*h)[2], double LLR_ret[], double L_ch[],  double L_dec[], int y[], int z, int col)
{
    double temp;
	int col_p;
    int i,j,k;
    for(i=0;i<rows_p;i++)
    {
        temp=1;
        for(j=0;j<rows_p;j++)
        {
            if(j!=i && h[j][0]==h[i][0])
            {
                temp=temp * tanhf(LLR[j]/2);
            }
        }
								
								
        LLR_ret[i] = log((1 + temp)/(1 - temp));     // lower and upper bounding the LLR
								
        if(LLR_ret[i] > 40)
        {
            LLR_ret[i]=40;
        }
        else if(LLR_ret[i]<-40)
        {
            LLR_ret[i]=-40;
        }
        
    }
    
    for(i=0;i<COL;i++)							// L_dec array used to decide the value of each bit of codeword here it is initalized to LLr value received from channel
    {
        L_dec[i]=L_ch[i];
    }
    
    
    for(i=1;i<col+1;i++)						// LLR values received by the variable nodes are added and stored in L_dec for decision making
    {
        for(j=0;j<rows_p;j++)
        {
            if(h[j][1]==i)
            {
                L_dec[i-1]=L_dec[i-1]+LLR_ret[j];
            }
            
        }
        
        if(L_dec[i-1]<=0)						// decision about the bit values of the received codeword is done her and stored in Y.
        {
            y[i-1]=1;
        }
        else
        {
            y[i-1]=0;
        }
        
    }
    
    
    //z = codesum(y,col);
    z=codecheck(col, col_p,rows_p,h,y); // checking whether the decoded codeword is all zero or not
    
    if(z==1)								// if decoded perfectly exit the deoding loop
    {
        return ;
    }
    // updating LLR values on variable nodes side for each variable and check node
    for(i=0;i<rows_p;i++)
    {
        temp=0;
        for(j=0;j<rows_p;j++)
        {
            if(j!=i && h[j][1]==h[i][1])
            {
                temp=temp + LLR_ret[j];
                k=h[i][1];
                
            }
        }
        LLR[i] = temp+L_ch[k-1];
    }
 
}
 
int main()
{
    
    
	// flags and counters
int z,i,j,N,k,ber_count,looping,t,sum;
    float d=1;
	float rate=0.5;
	int rows_p,col_p;
	int col,y[col],maxTransmissions=20,decoderIterations=10,maxErrors=100,errorsAccumulated=0;			// iterations gives the maximum number of time the decoder is run for each value of SNR
//	 printf("enter number of rows in the txt file being given as input\n");
//	 scanf("%d",&rows_p);
 
//	 printf("\n enter number of columns \n");
//	 scanf("%d",&col);
//	int *y=(int*) calloc (col,sizeof(int));	 //the decoded codeword will be saved here.
    
//	float *x=(float*) calloc (col,sizeof(float));
//	double *noise=(double*) calloc (col,sizeof(double));		// noise array is noise added to all zero codeword.
	//double noise[]={1.1,0.9,-0.1,1.1,-1.1,0.9}		;
    
	double var,snr;
	double temp; 								//temp variable
    
//	double *L_ch=(double*) calloc (col,sizeof(double));			//holds LLR values given by the channel
//	double *L_dec=(double*) calloc (col,sizeof(double));
    
    float noise[col];  // "x" will be used as a codeword and "y" is received codeword.
    double L_ch[col],L_dec[col];    //holds LLR values given by the channel
	double LLR[rows_p],LLR_ret[rows_p];					//hold updated LLR values at variable node and check node respectively
	double BER[11];												// BER array one for each SNR as SNR is varied from 0-10 in steps of 1
    float snr_db[]={0,1,2,3,4};
    int snr_range=5,snr_count;
	int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
    int  ret,row=0;
	double error_bits,error;
    // Set Field Separator here

    int modulationScheme = 0,noOfSymbols;
    
int h[ROWS_P][COL_P]={{1,1},{1,18},{1,27},{1,82},{1,102},{1,103},{1,130},{1,177},{1,190},{1,203},{2,2},{2,15},{2,75},{2,80},{2,86},{2,104},{2,121},{2,141},{2,144},{2,191},{3,3},{3,31},{3,32},{3,42},{3,101},{3,105},{3,153},{3,159},{3,178},{3,199},{4,4},{4,37},{4,71},{4,75},{4,85},{4,106},{4,111},{4,114},{4,127},{4,164},{5,5},{5,17},{5,42},{5,72},{5,87},{5,107},{5,141},{5,158},{5,193},{5,197},{6,4},{6,6},{6,17},{6,78},{6,102},{6,108},{6,162},{6,165},{6,167},{6,174},{7,7},{7,23},{7,73},{7,80},{7,83},{7,109},{7,118},{7,168},{7,177},{7,178},{8,8},{8,33},{8,37},{8,73},{8,100},{8,110},{8,156},{8,173},{8,192},{8,197},{9,9},{9,40},{9,41},{9,88},{9,92},{9,103},{9,111},{9,173},{9,181},{9,199},{10,10},{10,14},{10,23},{10,53},{10,93},{10,107},{10,112},{10,137},{10,167},{10,175},{11,11},{11,19},{11,26},{11,28},{11,88},{11,110},{11,113},{11,116},{11,170},{11,191},{12,1},{12,12},{12,25},{12,86},{12,97},{12,108},{12,114},{12,124},{12,161},{12,192},{13,4},{13,13},{13,33},{13,34},{13,50},{13,115},{13,137},{13,140},{13,146},{13,160},{14,14},{14,31},{14,40},{14,58},{14,95},{14,116},{14,121},{14,166},{14,174},{14,203},{15,15},{15,68},{15,70},{15,87},{15,101},{15,109},{15,113},{15,117},{15,165},{15,180},{16,4},{16,16},{16,59},{16,67},{16,92},{16,118},{16,125},{16,131},{16,138},{16,151},{17,15},{17,17},{17,44},{17,71},{17,73},{17,119},{17,161},{17,190},{17,194},{17,198},{18,18},{18,47},{18,62},{18,85},{18,93},{18,120},{18,122},{18,125},{18,146},{18,181},{19,19},{19,22},{19,23},{19,37},{19,57},{19,121},{19,126},{19,130},{19,131},{19,143},{20,1},{20,20},{20,50},{20,51},{20,99},{20,106},{20,122},{20,169},{20,179},{20,200},{21,21},{21,32},{21,62},{21,72},{21,98},{21,123},{21,126},{21,154},{21,168},{21,204},{22,22},{22,31},{22,44},{22,89},{22,98},{22,124},{22,141},{22,160},{22,169},{22,176},{23,23},{23,32},{23,61},{23,65},{23,99},{23,125},{23,132},{23,133},{23,147},{23,152},{24,16},{24,24},{24,42},{24,73},{24,77},{24,126},{24,142},{24,145},{24,146},{24,147},{25,5},{25,24},{25,25},{25,55},{25,67},{25,127},{25,133},{25,165},{25,178},{25,185},{26,10},{26,26},{26,27},{26,40},{26,85},{26,128},{26,147},{26,155},{26,160},{26,200},{27,22},{27,27},{27,42},{27,50},{27,74},{27,108},{27,129},{27,154},{27,170},{27,195},{28,2},{28,28},{28,63},{28,67},{28,94},{28,130},{28,150},{28,171},{28,187},{28,192},{29,29},{29,48},{29,69},{29,79},{29,90},{29,116},{29,131},{29,159},{29,176},{29,200},{30,7},{30,30},{30,53},{30,58},{30,94},{30,127},{30,132},{30,140},{30,162},{30,189},{31,29},{31,31},{31,64},{31,77},{31,94},{31,117},{31,133},{31,167},{31,183},{31,190},{32,20},{32,30},{32,32},{32,74},{32,78},{32,115},{32,134},{32,151},{32,181},{32,194},{33,11},{33,33},{33,47},{33,76},{33,81},{33,109},{33,135},{33,154},{33,155},{33,179},{34,2},{34,7},{34,34},{34,71},{34,76},{34,136},{34,138},{34,159},{34,182},{34,183},{35,27},{35,29},{35,35},{35,60},{35,86},{35,123},{35,137},{35,149},{35,166},{35,189},{36,17},{36,35},{36,36},{36,48},{36,100},{36,138},{36,139},{36,146},{36,163},{36,168},{37,5},{37,34},{37,37},{37,38},{37,69},{37,117},{37,139},{37,145},{37,169},{37,203},{38,38},{38,56},{38,76},{38,92},{38,101},{38,106},{38,123},{38,140},{38,161},{38,170},{39,39},{39,41},{39,60},{39,76},{39,78},{39,125},{39,141},{39,142},{39,175},{39,198},{40,2},{40,35},{40,40},{40,43},{40,93},{40,114},{40,135},{40,142},{40,148},{40,158},{41,1},{41,2},{41,13},{41,41},{41,59},{41,109},{41,119},{41,132},{41,143},{41,157},{42,11},{42,42},{42,43},{42,92},{42,95},{42,115},{42,117},{42,144},{42,156},{42,204},{43,7},{43,9},{43,43},{43,45},{43,56},{43,122},{43,145},{43,192},{43,194},{43,201},{44,10},{44,44},{44,75},{44,83},{44,95},{44,110},{44,135},{44,146},{44,157},{44,180},{45,45},{45,63},{45,79},{45,81},{45,97},{45,127},{45,139},{45,147},{45,148},{45,195},{46,34},{46,46},{46,61},{46,66},{46,77},{46,105},{46,144},{46,148},{46,197},{46,201},{47,14},{47,20},{47,46},{47,47},{47,83},{47,124},{47,128},{47,132},{47,149},{47,159},{48,8},{48,13},{48,26},{48,48},{48,62},{48,149},{48,150},{48,174},{48,193},{48,195},{49,15},{49,21},{49,25},{49,49},{49,51},{49,145},{49,149},{49,151},{49,177},{49,188},{50,8},{50,49},{50,50},{50,54},{50,89},{50,105},{50,126},{50,152},{50,164},{50,165},{51,43},{51,51},{51,66},{51,68},{51,91},{51,131},{51,133},{51,153},{51,187},{51,189},{52,1},{52,39},{52,45},{52,52},{52,54},{52,110},{52,140},{52,150},{52,154},{52,163},{53,8},{53,53},{53,60},{53,64},{53,90},{53,138},{53,155},{53,157},{53,194},{53,204},{54,12},{54,28},{54,54},{54,60},{54,82},{54,112},{54,139},{54,151},{54,156},{54,183},{55,3},{55,17},{55,37},{55,55},{55,99},{55,112},{55,148},{55,157},{55,172},{55,189},{56,20},{56,31},{56,56},{56,80},{56,91},{56,152},{56,156},{56,158},{56,162},{56,180},{57,28},{57,57},{57,66},{57,81},{57,89},{57,134},{57,137},{57,159},{57,172},{57,196},{58,5},{58,58},{58,70},{58,78},{58,91},{58,118},{58,149},{58,154},{58,160},{58,201},{59,18},{59,24},{59,59},{59,88},{59,96},{59,150},{59,152},{59,161},{59,179},{59,183},{60,21},{60,38},{60,55},{60,59},{60,60},{60,162},{60,176},{60,187},{60,190},{60,197},{61,61},{61,69},{61,74},{61,93},{61,101},{61,111},{61,128},{61,163},{61,193},{61,196},{62,6},{62,7},{62,35},{62,62},{62,96},{62,103},{62,113},{62,129},{62,164},{62,200},{63,16},{63,27},{63,44},{63,63},{63,88},{63,121},{63,134},{63,165},{63,175},{63,188},{64,4},{64,26},{64,64},{64,79},{64,84},{64,119},{64,134},{64,136},{64,166},{64,168},{65,12},{65,13},{65,52},{65,57},{65,65},{65,106},{65,138},{65,142},{65,167},{65,176},{66,24},{66,30},{66,52},{66,66},{66,102},{66,112},{66,117},{66,122},{66,135},{66,168},{67,6},{67,57},{67,67},{67,85},{67,97},{67,140},{67,169},{67,182},{67,184},{67,186},{68,6},{68,58},{68,68},{68,71},{68,90},{68,134},{68,143},{68,145},{68,152},{68,170},{69,54},{69,57},{69,59},{69,69},{69,77},{69,103},{69,104},{69,114},{69,136},{69,171},{70,19},{70,24},{70,56},{70,70},{70,100},{70,105},{70,114},{70,128},{70,129},{70,172},{71,14},{71,52},{71,63},{71,70},{71,71},{71,120},{71,169},{71,173},{71,178},{71,196},{72,11},{72,25},{72,39},{72,66},{72,72},{72,120},{72,130},{72,132},{72,174},{72,199},{73,48},{73,49},{73,64},{73,73},{73,98},{73,111},{73,175},{73,179},{73,201},{73,202},{74,9},{74,15},{74,58},{74,74},{74,84},{74,107},{74,120},{74,135},{74,164},{74,176},{75,28},{75,41},{75,70},{75,75},{75,96},{75,133},{75,155},{75,166},{75,177},{75,202},{76,26},{76,45},{76,65},{76,76},{76,94},{76,144},{76,158},{76,172},{76,178},{76,203},{77,10},{77,13},{77,77},{77,84},{77,87},{77,127},{77,151},{77,163},{77,179},{77,191},{78,49},{78,55},{78,65},{78,78},{78,90},{78,122},{78,130},{78,139},{78,180},{78,182},{79,33},{79,43},{79,67},{79,79},{79,99},{79,123},{79,141},{79,181},{79,188},{79,202},{80,18},{80,19},{80,35},{80,46},{80,80},{80,153},{80,167},{80,182},{80,188},{80,193},{81,9},{81,16},{81,36},{81,55},{81,81},{81,143},{81,160},{81,183},{81,186},{81,191},{82,10},{82,11},{82,79},{82,82},{82,96},{82,108},{82,111},{82,126},{82,172},{82,184},{83,12},{83,36},{83,69},{83,83},{83,87},{83,148},{83,174},{83,185},{83,202},{83,204},{84,45},{84,47},{84,48},{84,75},{84,84},{84,108},{84,123},{84,142},{84,153},{84,186},{85,9},{85,46},{85,53},{85,54},{85,85},{85,115},{85,121},{85,129},{85,177},{85,187},{86,22},{86,64},{86,83},{86,86},{86,91},{86,107},{86,116},{86,171},{86,188},{86,199},{87,8},{87,22},{87,61},{87,81},{87,87},{87,104},{87,120},{87,182},{87,189},{87,198},{88,32},{88,33},{88,39},{88,51},{88,88},{88,129},{88,143},{88,171},{88,180},{88,190},{89,3},{89,21},{89,52},{89,89},{89,100},{89,103},{89,109},{89,115},{89,125},{89,191},{90,20},{90,40},{90,44},{90,61},{90,90},{90,118},{90,137},{90,153},{90,184},{90,192},{91,6},{91,23},{91,29},{91,84},{91,91},{91,144},{91,155},{91,173},{91,185},{91,193},{92,14},{92,49},{92,72},{92,92},{92,102},{92,147},{92,171},{92,185},{92,186},{92,194},{93,5},{93,21},{93,29},{93,65},{93,93},{93,105},{93,110},{93,119},{93,184},{93,195},{94,39},{94,80},{94,82},{94,94},{94,98},{94,107},{94,113},{94,131},{94,166},{94,196},{95,30},{95,47},{95,50},{95,63},{95,95},{95,104},{95,118},{95,161},{95,163},{95,197},{96,25},{96,34},{96,56},{96,68},{96,96},{96,116},{96,181},{96,186},{96,196},{96,198},{97,36},{97,38},{97,46},{97,89},{97,97},{97,113},{97,136},{97,150},{97,157},{97,199},{98,3},{98,12},{98,18},{98,30},{98,98},{98,136},{98,170},{98,187},{98,198},{98,200},{99,53},{99,62},{99,74},{99,97},{99,99},{99,104},{99,119},{99,156},{99,185},{99,201},{100,16},{100,68},{100,82},{100,95},{100,100},{100,106}};
 
                 for(snr_count=0;snr_count<snr_range;snr_count++)
	{
      //  cout<<"Decoder run for SNR in db=" <<snr_db[snr_count]<<endl;
				snr=pow(10,(snr_db[snr_count]/10));
				
				ModulationSchemeValues (modulationScheme, noOfSymbols, var, d, col, rate, snr);  // determining various values based on mdulation scheme
        
        							// calulating noise variance from SNR
				BER[snr_count]=0;									// initializing BER
             //   normal_distribution<double> dist(0.0, 1);
                N=0;
                errorsAccumulated=0;
					while(errorsAccumulated<=maxErrors && N<=maxTransmissions)
					{		
                        N++;
                        
                        InitializeChannelLLR( var, modulationScheme, noOfSymbols, x, noise,  L_ch, d, rows_p, h, LLR);
                        
                        for(looping=0;looping<decoderIterations;looping++)
						{
							
                            SPADecoder(rows_p, LLR, h, LLR_ret, L_ch, L_dec, y, z, col  );
                     printf("%d\t", y[looping]);
						}
										
							if(z==1)											// if decoded correctly BER for that codeword is zero
								{
									BER[snr_count]=BER[snr_count]+0;

								}
							else 												// if not decoded properly calulating the BER
								{		
									error_bits=0;
									for(i=0;i<col;i++)
									{
										if(y[i]!=0)
										{
											error_bits++;
											
										}
									}
                                    errorsAccumulated+=error_bits;
                                    error=error_bits/(double)col;
									BER[snr_count]=BER[snr_count]+error;
								}
                        if(N%300==0)
                     //   cout<<"iteration="<<N<<"\t"<<"errors accumulated="<<errorsAccumulated<<endl;
					}
					
					BER[snr_count]=BER[snr_count]/(double)N; 					// averaging BER over all decoding iterations.
					printf("snr=%lf\tBER[%d]=%lf \n",snr_db[snr_count],snr_count,BER[snr_count]);
	}
	
return 0;
		
	
}


предупреждающее сообщение


prog.c: In function 'main':
prog.c:236:2: error: variable-sized object may not be initialized
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
  ^
prog.c:236:14: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
              ^
prog.c:236:14: note: (near initialization for 'x')
prog.c:236:16: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                ^
prog.c:236:16: note: (near initialization for 'x')
prog.c:236:18: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                  ^
prog.c:236:18: note: (near initialization for 'x')
prog.c:236:20: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                    ^
prog.c:236:20: note: (near initialization for 'x')
prog.c:236:22: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                      ^
prog.c:236:22: note: (near initialization for 'x')
prog.c:236:24: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                        ^
prog.c:236:24: note: (near initialization for 'x')
prog.c:236:26: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                          ^
prog.c:236:26: note: (near initialization for 'x')
prog.c:236:28: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                            ^
prog.c:236:28: note: (near initialization for 'x')
prog.c:236:30: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                              ^
prog.c:236:30: note: (near initialization for 'x')
prog.c:236:32: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                                ^
prog.c:236:32: note: (near initialization for 'x')
prog.c:236:34: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                                  ^
prog.c:236:34: note: (near initialization for 'x')
prog.c:236:36: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                                    ^
prog.c:236:36: note: (near initialization for 'x')
prog.c:236:38: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                                      ^
prog.c:236:38: note: (near initialization for 'x')
prog.c:236:40: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                                        ^
prog.c:236:40: note: (near initialization for 'x')
prog.c:236:42: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                                          ^
prog.c:236:42: note: (near initialization for 'x')
prog.c:236:44: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                                            ^
prog.c:236:44: note: (near initialization for 'x')
prog.c:236:46: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                                              ^
prog.c:236:46: note: (near initialization for 'x')
prog.c:236:48: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                                                ^
prog.c:236:48: note: (near initialization for 'x')
prog.c:236:50: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                                                  ^
prog.c:236:50: note: (near initialization for 'x')
prog.c:236:52: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                                                    ^
prog.c:236:52: note: (near initialization for 'x')
prog.c:236:54: warning: excess elements in array initializer
  int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1}
                                                      ^
prog.c:236:54: note: (near initialization for 'x')
prog.c:237:5: error: expected ',' or ';' before 'int'
     int  ret,row=0;
     ^
prog.c:261:83: warning: passing argument 4 of 'InitializeChannelLLR' from incompatible pointer type [-Wincompatible-pointer-types]
                         InitializeChannelLLR( var, modulationScheme, noOfSymbols, x, noise,  L_ch, d, rows_p, h, LLR);
                                                                                   ^
prog.c:90:6: note: expected 'float *' but argument is of type 'int *'
 void InitializeChannelLLR (double var, int modulationScheme, int noOfSymbols, float x[], float noise[], double L_ch[], float d, int rows_p, int (*h)[2], double LLR[])
      ^
prog.c:292:6: error: expected expression before '}' token
      }
      ^


Что я уже пробовал:

Warning: excess elements in array initializer
- Мне нужно как можно скорее завершить этот проект. Поэтому, пожалуйста, кто-нибудь поможет разобраться в этой проблеме.

4 Ответов

Рейтинг:
2

Jochen Arndt

Вы уже спрашивали подобное у C: предупреждение: избыточные элементы в инициализаторе массива - дискуссионные доски C / C++ / MFC[^] и получил ответ от меня в Re: C: предупреждение: избыточные элементы в инициализаторе массива - дискуссионные доски C / C++ / MFC[^] что решило, по крайней мере, предупреждение от субъекта вашего вопроса.

Все что я могу добавить к ответу Мэй есть:
Это предупреждение Вы можете проигнорировать его (он не влияет на генерацию и выполнение кода) или сделать то, что я предложил (не устанавливайте размер для инициализированных массивов или установите его на реальный размер):

// Ensure that col is 21 or don't do this to avoid warnings
//int x[col]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1};
// Use this instead
int x[]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1};
// Or this
//int x[21]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1};

prog.c:237:5: error: expected ',' or ';' before 'int'
     int  ret,row=0;
Довольно ясно. Прочтите предыдущую строчку. Завершающая точка с запятой там отсутствует (в вашем коде, а не в моих приведенных выше примерах).

prog.c:261:83: warning: passing argument 4 of 'InitializeChannelLLR' from incompatible pointer type [-Wincompatible-pointer-types]
                         InitializeChannelLLR( var, modulationScheme, noOfSymbols, x, noise,  L_ch, d, rows_p, h, LLR);
Проверьте свой код: вы проходите x в качестве 4-го аргумента, который имеет тип int[] но функция ожидает, что float[].

prog.c:292:6: error: expected expression before '}' token
Еще раз: проверьте код в этой позиции:
{
    // ... some other code
    if(N%300==0)
    //   cout<<"iteration="<<N<<"\t"<<"errors accumulated="<<errorsAccumulated<<endl;
}
Комментируя строку, вы получаете unterminated if состояние. Вы также должны прокомментировать условие или добавить круглые скобки вокруг комментируемой строки.


Рейтинг:
2

Patrice T

Я настоятельно рекомендую вам инициализировать переменные, прежде чем использовать их для объявления и определения размера массивов.
Используйте отладчик, чтобы увидеть, что делает ваш код.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


0x01AA

"Я настоятельно рекомендую вам инициализировать переменные, прежде чем использовать их для объявления и определения размера массивов".

"Используйте отладчик, чтобы увидеть, что делает ваш код": я не уверен в VS в этом случае, но иногда Отладчики инициализируют переменные, и это приводит к ситуациям, когда код работает идеально в отладчике, но не работает без отладчика (по крайней мере, продукты embarcadero имеют такое плохое поведение)
Во всяком случае, пятерка за "подсказку инициализации".

Patrice T

Спасибо.
На мой взгляд, компиляторы C должны отбрасывать ошибки для неинициализированных переменных.

Рейтинг:
0

Member 13261175

Согласно вашим инструкциям, я изменил и выполнил коды, но

While compiling below codes i am getting "Segmentation Faults" notification in a compile window. I don`t know what`s wrong in the code. Please suggest me.


#include <stdio.h>
#include <math.h>
 
#define COL 204
#define COL_P 2
#define ROWS_P 1020
 
int codecheck(int col,int col_p,int rows_p,int (*h)[2],int x[])
{	int i,j,m,f; //flags
	int sum = 0;
	int y[COL];
	
	for (i=0;i<COL;i++)
	y[i]=0;
	m=1;
	f=-1;
	for(i=0;i<rows_p;)							 
	{			
		for(j=0;j<rows_p;j++)
		{
			if(h[j][0]==m)
			{		
				y[m]=y[m] + x[h[j][1]-1];
					f++;
			}
		}
		y[m]=y[m]%2;
		m=m+1;
		i=f+1;
	}
 
	for (i = 0; i < COL; ++i) 
		{
			sum =sum+ y[i];
		}
	if (sum == 0) 
		{
			return 1;
		}
	else
		{	
			return -1;
		}
				
}
 
int codesum (int y[],int col)
{
    int sum=0;
    for(int i=0;i<COL;i++)
        sum+=y[i];
    //cout<< "sum="<< sum<<endl;
    if(sum>0)
        return 0;
    else
        return 1;
}

void ModulationSchemeValues (int modulationScheme, int noOfSymbols, double var, float d, int col, float rate, double snr)
{
	            switch (modulationScheme)
            {
                case 0:
                    //cout<<"case 0"<<endl;
                    var=1/(2*rate*snr);
                    noOfSymbols = col;
                    d=1;
                    break;
                case 1:
                    //cout<<"case 1"<<endl;
                    var=1/(4*rate*snr);
                    noOfSymbols = col/2;
                    d=1/sqrt(2);
                    break;
                case 2:
                    //cout<<"case 2"<<endl;
                    var=1/(8*rate*snr);
                    noOfSymbols = col/4;
                    d=1/sqrt(10);
                default:
                    var=1/(2*rate*snr);
                    noOfSymbols = col;
                    d=1;
                    break;
            }
}

void InitializeChannelLLR (double var, int modulationScheme, int noOfSymbols, int x[], float noise[], double L_ch[], float d, int rows_p, int (*h)[2], double LLR[])
{
    
    int j=0;   // temporary flags
   int k=0,t;
    for(int i=0;i<noOfSymbols;i++)							// using randnoise function introducing noise to all zero codeword
    {
        
            x[j]=d;
            noise[j]=(x[j])+0.8;
            L_ch[j]= 2*noise[j]/var;
            j++;
       
        
    }

    
    for(int j=0;j<rows_p;j++)
    {
        //cout<<"enter loop"<<endl;
        //cout<< "j="<<j<<endl;  //<<j<<"\t";
        t=h[j][1]-1;
        LLR[j]=L_ch[t];
    }
    //cout<<"L_ch initialize done \n";

}
 
void SPADecoder(int rows_p, double LLR[], int (*h)[2], double LLR_ret[], double L_ch[],  double L_dec[], int y[], int z, int col)
{
    double temp;
	int col_p;
    int i,j,k;
    for(i=0;i<rows_p;i++)
    {
        temp=1;
        for(j=0;j<rows_p;j++)
        {
            if(j!=i && h[j][0]==h[i][0])
            {
                temp=temp * tanhf(LLR[j]/2);
            }
        }
								
								
        LLR_ret[i] = log((1 + temp)/(1 - temp));     // lower and upper bounding the LLR
								
        if(LLR_ret[i] > 40)
        {
            LLR_ret[i]=40;
        }
        else if(LLR_ret[i]<-40)
        {
            LLR_ret[i]=-40;
        }
        
    }
    
    for(i=0;i<COL;i++)							// L_dec array used to decide the value of each bit of codeword here it is initalized to LLr value received from channel
    {
        L_dec[i]=L_ch[i];
    }
    
    
    for(i=1;i<col+1;i++)						// LLR values received by the variable nodes are added and stored in L_dec for decision making
    {
        for(j=0;j<rows_p;j++)
        {
            if(h[j][1]==i)
            {
                L_dec[i-1]=L_dec[i-1]+LLR_ret[j];
            }
            
        }
        
        if(L_dec[i-1]<=0)						// decision about the bit values of the received codeword is done her and stored in Y.
        {
            y[i-1]=1;
        }
        else
        {
            y[i-1]=0;
        }
        
    }
    
    
    //z = codesum(y,col);
    z=codecheck(col, col_p,rows_p,h,y); // checking whether the decoded codeword is all zero or not
    
    if(z==1)								// if decoded perfectly exit the deoding loop
    {
        return ;
    }
    // updating LLR values on variable nodes side for each variable and check node
    for(i=0;i<rows_p;i++)
    {
        temp=0;
        for(j=0;j<rows_p;j++)
        {
            if(j!=i && h[j][1]==h[i][1])
            {
                temp=temp + LLR_ret[j];
                k=h[i][1];
                
            }
        }
        LLR[i] = temp+L_ch[k-1];
    }
 
}
 
int main()
{
    
    
	// flags and counters
int z,i,j,N,k,ber_count,looping,t,sum;
    float d=1;
	float rate=0.5;
	int rows_p,col_p;
	int col,y[col],maxTransmissions=20,decoderIterations=10,maxErrors=100,errorsAccumulated=0;			// iterations gives the maximum number of time the decoder is run for each value of SNR
//	 printf("enter number of rows in the txt file being given as input\n");
//	 scanf("%d",&rows_p);
 
//	 printf("\n enter number of columns \n");
//	 scanf("%d",&col);
//	int *y=(int*) calloc (col,sizeof(int));	 //the decoded codeword will be saved here.
    
//	float *x=(float*) calloc (col,sizeof(float));
//	double *noise=(double*) calloc (col,sizeof(double));		// noise array is noise added to all zero codeword.
	//double noise[]={1.1,0.9,-0.1,1.1,-1.1,0.9}		;
    
	double var,snr;
	double temp; 								//temp variable
    
//	double *L_ch=(double*) calloc (col,sizeof(double));			//holds LLR values given by the channel
//	double *L_dec=(double*) calloc (col,sizeof(double));
    
    float noise[col];  // "x" will be used as a codeword and "y" is received codeword.
    double L_ch[col],L_dec[col];    //holds LLR values given by the channel
	double LLR[rows_p],LLR_ret[rows_p];					//hold updated LLR values at variable node and check node respectively
	double BER[11];												// BER array one for each SNR as SNR is varied from 0-10 in steps of 1
    float snr_db[]={0,1,2,3,4};
    int snr_range=5,snr_count;
	int x[]={0,1,0,0,0,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,1};
    int  ret,row=0;
	double error_bits,error;
    // Set Field Separator here

    int modulationScheme = 0,noOfSymbols=204;
    
int h[ROWS_P][COL_P]={{1,1},{1,18},{1,27},{1,82},{1,102},{1,103},{1,130},{1,177},{1,190},{1,203},{2,2},{2,15},{2,75},{2,80},{2,86},{2,104},{2,121},{2,141},{2,144},{2,191},{3,3},{3,31},{3,32},{3,42},{3,101},{3,105},{3,153},{3,159},{3,178},{3,199},{4,4},{4,37},{4,71},{4,75},{4,85},{4,106},{4,111},{4,114},{4,127},{4,164},{5,5},{5,17},{5,42},{5,72},{5,87},{5,107},{5,141},{5,158},{5,193},{5,197},{6,4},{6,6},{6,17},{6,78},{6,102},{6,108},{6,162},{6,165},{6,167},{6,174},{7,7},{7,23},{7,73},{7,80},{7,83},{7,109},{7,118},{7,168},{7,177},{7,178},{8,8},{8,33},{8,37},{8,73},{8,100},{8,110},{8,156},{8,173},{8,192},{8,197},{9,9},{9,40},{9,41},{9,88},{9,92},{9,103},{9,111},{9,173},{9,181},{9,199},{10,10},{10,14},{10,23},{10,53},{10,93},{10,107},{10,112},{10,137},{10,167},{10,175},{11,11},{11,19},{11,26},{11,28},{11,88},{11,110},{11,113},{11,116},{11,170},{11,191},{12,1},{12,12},{12,25},{12,86},{12,97},{12,108},{12,114},{12,124},{12,161},{12,192},{13,4},{13,13},{13,33},{13,34},{13,50},{13,115},{13,137},{13,140},{13,146},{13,160},{14,14},{14,31},{14,40},{14,58},{14,95},{14,116},{14,121},{14,166},{14,174},{14,203},{15,15},{15,68},{15,70},{15,87},{15,101},{15,109},{15,113},{15,117},{15,165},{15,180},{16,4},{16,16},{16,59},{16,67},{16,92},{16,118},{16,125},{16,131},{16,138},{16,151},{17,15},{17,17},{17,44},{17,71},{17,73},{17,119},{17,161},{17,190},{17,194},{17,198},{18,18},{18,47},{18,62},{18,85},{18,93},{18,120},{18,122},{18,125},{18,146},{18,181},{19,19},{19,22},{19,23},{19,37},{19,57},{19,121},{19,126},{19,130},{19,131},{19,143},{20,1},{20,20},{20,50},{20,51},{20,99},{20,106},{20,122},{20,169},{20,179},{20,200},{21,21},{21,32},{21,62},{21,72},{21,98},{21,123},{21,126},{21,154},{21,168},{21,204},{22,22},{22,31},{22,44},{22,89},{22,98},{22,124},{22,141},{22,160},{22,169},{22,176},{23,23},{23,32},{23,61},{23,65},{23,99},{23,125},{23,132},{23,133},{23,147},{23,152},{24,16},{24,24},{24,42},{24,73},{24,77},{24,126},{24,142},{24,145},{24,146},{24,147},{25,5},{25,24},{25,25},{25,55},{25,67},{25,127},{25,133},{25,165},{25,178},{25,185},{26,10},{26,26},{26,27},{26,40},{26,85},{26,128},{26,147},{26,155},{26,160},{26,200},{27,22},{27,27},{27,42},{27,50},{27,74},{27,108},{27,129},{27,154},{27,170},{27,195},{28,2},{28,28},{28,63},{28,67},{28,94},{28,130},{28,150},{28,171},{28,187},{28,192},{29,29},{29,48},{29,69},{29,79},{29,90},{29,116},{29,131},{29,159},{29,176},{29,200},{30,7},{30,30},{30,53},{30,58},{30,94},{30,127},{30,132},{30,140},{30,162},{30,189},{31,29},{31,31},{31,64},{31,77},{31,94},{31,117},{31,133},{31,167},{31,183},{31,190},{32,20},{32,30},{32,32},{32,74},{32,78},{32,115},{32,134},{32,151},{32,181},{32,194},{33,11},{33,33},{33,47},{33,76},{33,81},{33,109},{33,135},{33,154},{33,155},{33,179},{34,2},{34,7},{34,34},{34,71},{34,76},{34,136},{34,138},{34,159},{34,182},{34,183},{35,27},{35,29},{35,35},{35,60},{35,86},{35,123},{35,137},{35,149},{35,166},{35,189},{36,17},{36,35},{36,36},{36,48},{36,100},{36,138},{36,139},{36,146},{36,163},{36,168},{37,5},{37,34},{37,37},{37,38},{37,69},{37,117},{37,139},{37,145},{37,169},{37,203},{38,38},{38,56},{38,76},{38,92},{38,101},{38,106},{38,123},{38,140},{38,161},{38,170},{39,39},{39,41},{39,60},{39,76},{39,78},{39,125},{39,141},{39,142},{39,175},{39,198},{40,2},{40,35},{40,40},{40,43},{40,93},{40,114},{40,135},{40,142},{40,148},{40,158},{41,1},{41,2},{41,13},{41,41},{41,59},{41,109},{41,119},{41,132},{41,143},{41,157},{42,11},{42,42},{42,43},{42,92},{42,95},{42,115},{42,117},{42,144},{42,156},{42,204},{43,7},{43,9},{43,43},{43,45},{43,56},{43,


Patrice T

Это не решение, это новый вопрос.
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.

0x01AA

Нет необходимости снижать рейтинг ошибок новичков"

Рейтинг:
0

Richard MacCutchan

Почему вы снова опубликовали этот дамп кода? У нас уже есть два экземпляра вопроса, и вам сказали, в чем проблема. Пожалуйста, не делайте репостов. И в будущих вопросах, пожалуйста, не просто сбрасывайте весь свой код и ожидайте, что люди попытаются выяснить, что не так. Покажите только те части, которые имеют отношение к проблеме.

Беглый взгляд на сообщения об ошибках говорит о том, что вы пытаетесь использовать конструкции C++ в программе на языке Си. И последнее сообщение говорит вам, что вы пытаетесь отправить int параметры в функцию, которая ожидает float типы.