Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. C: warning: excess elements in array initializer

C: warning: excess elements in array initializer

Scheduled Pinned Locked Moved C / C++ / MFC
graphicsdata-structures
14 Posts 5 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • U Offline
    U Offline
    User 13229174
    wrote on last edited by
    #1

    I've some warnings while trying to compile program in C language

    #include

    int codecheck(int col,int col_p,int rows_p,int **H,int x[])
    { int i,j,m,f; //flags
    int sum = 0;
    int y[col];

    for (i=0;i0)
        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:
    var=1/(2*rate*snr);
    noOfSymbols = col;
    d=1;
    break;
    case 1:
    var=1/(4*rate*snr);
    noOfSymbols = col/2;
    d=1/sqrt(2);
    break;
    case 2:
    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[], double noise[], double L_ch[], float &d, int &rows_p, vector> &h, double LLR[])
    {

    int j=0;   
    

    int k=0,t;
    for(int i=0;i

    J 1 Reply Last reply
    0
    • U User 13229174

      I've some warnings while trying to compile program in C language

      #include

      int codecheck(int col,int col_p,int rows_p,int **H,int x[])
      { int i,j,m,f; //flags
      int sum = 0;
      int y[col];

      for (i=0;i0)
          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:
      var=1/(2*rate*snr);
      noOfSymbols = col;
      d=1;
      break;
      case 1:
      var=1/(4*rate*snr);
      noOfSymbols = col/2;
      d=1/sqrt(2);
      break;
      case 2:
      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[], double noise[], double L_ch[], float &d, int &rows_p, vector> &h, double LLR[])
      {

      int j=0;   
      

      int k=0,t;
      for(int i=0;i

      J Offline
      J Offline
      Jochen Arndt
      wrote on last edited by
      #2

      Please stop posting such large code blocks (and repeating similar error messages). You question in QA brokes the system and lets the Firefox thread trying to show your message use 100 % CPU core load!

      rog.c:60:34: error: expected ';', ',' or ')' before '&' token
      void ModulationSchemeValues (int &modulationScheme, int &noOfSymbols, double &var, float &d, int &col, float &rate, double &snr)

      That is a C++ style function using references. C does not know references.

      prog.c:281:105: note: (near initialization for 'x')
      prog.c:281:107: warning: excess elements in array initializer
      int x[col]={0,0,1, ...

      You are passing more initialisers to the array then specified. Don't use variable based sizes with initialised arrays. Just use

      int x[] = {0,0,1,/* ... */ };

      or specify the size literally. Note also that such variable based array sizes are not supported by all compilers.

      Richard Andrew x64R 1 Reply Last reply
      0
      • J Jochen Arndt

        Please stop posting such large code blocks (and repeating similar error messages). You question in QA brokes the system and lets the Firefox thread trying to show your message use 100 % CPU core load!

        rog.c:60:34: error: expected ';', ',' or ')' before '&' token
        void ModulationSchemeValues (int &modulationScheme, int &noOfSymbols, double &var, float &d, int &col, float &rate, double &snr)

        That is a C++ style function using references. C does not know references.

        prog.c:281:105: note: (near initialization for 'x')
        prog.c:281:107: warning: excess elements in array initializer
        int x[col]={0,0,1, ...

        You are passing more initialisers to the array then specified. Don't use variable based sizes with initialised arrays. Just use

        int x[] = {0,0,1,/* ... */ };

        or specify the size literally. Note also that such variable based array sizes are not supported by all compilers.

        Richard Andrew x64R Offline
        Richard Andrew x64R Offline
        Richard Andrew x64
        wrote on last edited by
        #3

        Jochen Arndt wrote:

        C does not know references

        :omg: Are you sure? I used references in C when I was in school.

        The difficult we do right away... ...the impossible takes slightly longer.

        J 1 Reply Last reply
        0
        • Richard Andrew x64R Richard Andrew x64

          Jochen Arndt wrote:

          C does not know references

          :omg: Are you sure? I used references in C when I was in school.

          The difficult we do right away... ...the impossible takes slightly longer.

          J Offline
          J Offline
          Jochen Arndt
          wrote on last edited by
          #4

          I must confess that I have some difficulties to reply. I should have explained it in another way because naming something that does not exist for a specific subject is problematic. C++ introduced the concept of a reference. These are mainly used for passing arguments. Then it is usually called pass-by-reference. This concept does not exist for C but the poster used C++ style function declarations using that C++ concept. With C, passing arguments by pointers was (and still is) also called pass-by-reference. But passing by pointer is technically passing by value.

          www-cs-students.stanford.edu/~sjac/c-to-cpp-info/references[^]:

          In C, Pass-by-reference is simulated by passing the address of a variable (a pointer) and dereferencing that address within the function to read or write the actual variable. This will be referred to as "C style pass-by-reference."

          L Richard Andrew x64R 2 Replies Last reply
          0
          • J Jochen Arndt

            I must confess that I have some difficulties to reply. I should have explained it in another way because naming something that does not exist for a specific subject is problematic. C++ introduced the concept of a reference. These are mainly used for passing arguments. Then it is usually called pass-by-reference. This concept does not exist for C but the poster used C++ style function declarations using that C++ concept. With C, passing arguments by pointers was (and still is) also called pass-by-reference. But passing by pointer is technically passing by value.

            www-cs-students.stanford.edu/~sjac/c-to-cpp-info/references[^]:

            In C, Pass-by-reference is simulated by passing the address of a variable (a pointer) and dereferencing that address within the function to read or write the actual variable. This will be referred to as "C style pass-by-reference."

            L Offline
            L Offline
            Lost User
            wrote on last edited by
            #5

            Jochen Arndt wrote:

            But passing by pointer is technically passing by value.

            No it is not. The pointer points to a variable, it is not the value, but its address (i.e. a reference to it). Consider:

            void PassByValue(int foo)
            {
            // the value of foo is passed directly and may be manipulated here
            int i = foo + 5;
            }

            void PassByPointer(int* pFoo)
            {
            // the value of foo must first be obtained by dereferencing pFoo
            int foo = *pFoo; // get the value into a local variable
            int i = foo + 5;
            }

            J 1 Reply Last reply
            0
            • L Lost User

              Jochen Arndt wrote:

              But passing by pointer is technically passing by value.

              No it is not. The pointer points to a variable, it is not the value, but its address (i.e. a reference to it). Consider:

              void PassByValue(int foo)
              {
              // the value of foo is passed directly and may be manipulated here
              int i = foo + 5;
              }

              void PassByPointer(int* pFoo)
              {
              // the value of foo must first be obtained by dereferencing pFoo
              int foo = *pFoo; // get the value into a local variable
              int i = foo + 5;
              }

              J Offline
              J Offline
              Jochen Arndt
              wrote on last edited by
              #6

              pFoo is a value of type int*. If you change pFoo inside the function, the value of pFoo will be changed (the address) but not the value of the variable it points to. Therefore, it is technically passing by value. Compare this with a reference parameter int& foo. If you change foo, the value of the referenced variable will be changed but not the hidden address.

              L 1 Reply Last reply
              0
              • J Jochen Arndt

                pFoo is a value of type int*. If you change pFoo inside the function, the value of pFoo will be changed (the address) but not the value of the variable it points to. Therefore, it is technically passing by value. Compare this with a reference parameter int& foo. If you change foo, the value of the referenced variable will be changed but not the hidden address.

                L Offline
                L Offline
                Lost User
                wrote on last edited by
                #7

                Jochen Arndt wrote:

                pFoo is a value of type int*

                No it is a pointer type, not a value type. And a reference type (which does not exist in C) is just a shorthand allowing you to modify a caller's value. But under the covers it behaves just the same as a pointer, thus:

                void PassByPointer(int* pFoo)
                {
                *pFoo += 1; // manipulates whatever pFoo points to
                }

                void PassByReference(int& rFoo)
                {
                rFoo += 1; // manipulates whatever rFoo refers (i.e. points) to
                }

                J 1 Reply Last reply
                0
                • L Lost User

                  Jochen Arndt wrote:

                  pFoo is a value of type int*

                  No it is a pointer type, not a value type. And a reference type (which does not exist in C) is just a shorthand allowing you to modify a caller's value. But under the covers it behaves just the same as a pointer, thus:

                  void PassByPointer(int* pFoo)
                  {
                  *pFoo += 1; // manipulates whatever pFoo points to
                  }

                  void PassByReference(int& rFoo)
                  {
                  rFoo += 1; // manipulates whatever rFoo refers (i.e. points) to
                  }

                  J Offline
                  J Offline
                  Jochen Arndt
                  wrote on last edited by
                  #8

                  A value is the content held by a variable. A pointer contains an address which is it's value.

                  L 1 Reply Last reply
                  0
                  • J Jochen Arndt

                    A value is the content held by a variable. A pointer contains an address which is it's value.

                    L Offline
                    L Offline
                    Lost User
                    wrote on last edited by
                    #9

                    Semantics. ;P

                    1 Reply Last reply
                    0
                    • J Jochen Arndt

                      I must confess that I have some difficulties to reply. I should have explained it in another way because naming something that does not exist for a specific subject is problematic. C++ introduced the concept of a reference. These are mainly used for passing arguments. Then it is usually called pass-by-reference. This concept does not exist for C but the poster used C++ style function declarations using that C++ concept. With C, passing arguments by pointers was (and still is) also called pass-by-reference. But passing by pointer is technically passing by value.

                      www-cs-students.stanford.edu/~sjac/c-to-cpp-info/references[^]:

                      In C, Pass-by-reference is simulated by passing the address of a variable (a pointer) and dereferencing that address within the function to read or write the actual variable. This will be referred to as "C style pass-by-reference."

                      Richard Andrew x64R Offline
                      Richard Andrew x64R Offline
                      Richard Andrew x64
                      wrote on last edited by
                      #10

                      I appreciate the clarification. However, in school we used the & to indicate a reference in C. As in:

                      int PassByeReference(B& Parameter)

                      { // Do something with B }

                      The difficult we do right away... ...the impossible takes slightly longer.

                      K 1 Reply Last reply
                      0
                      • Richard Andrew x64R Richard Andrew x64

                        I appreciate the clarification. However, in school we used the & to indicate a reference in C. As in:

                        int PassByeReference(B& Parameter)

                        { // Do something with B }

                        The difficult we do right away... ...the impossible takes slightly longer.

                        K Offline
                        K Offline
                        k5054
                        wrote on last edited by
                        #11

                        Standard C does not know about references. Also, strict ANSI C does not know about // style comments, but many modern C compilers do. Possibly you were using a C++ compiler to compile c code?

                        Richard Andrew x64R 1 Reply Last reply
                        0
                        • K k5054

                          Standard C does not know about references. Also, strict ANSI C does not know about // style comments, but many modern C compilers do. Possibly you were using a C++ compiler to compile c code?

                          Richard Andrew x64R Offline
                          Richard Andrew x64R Offline
                          Richard Andrew x64
                          wrote on last edited by
                          #12

                          It was an early version of Borland Turbo C for DOS. Maybe they added the reference feature to the language?

                          The difficult we do right away... ...the impossible takes slightly longer.

                          K J 2 Replies Last reply
                          0
                          • Richard Andrew x64R Richard Andrew x64

                            It was an early version of Borland Turbo C for DOS. Maybe they added the reference feature to the language?

                            The difficult we do right away... ...the impossible takes slightly longer.

                            K Offline
                            K Offline
                            k5054
                            wrote on last edited by
                            #13

                            That seems unlikely. I tried the following here : https://archive.org/details/msdos\_borland\_turbo\_c\_2.01, and got the expected compilation error

                            #include void f(int &x) { x += 1; }

                            int main(void)
                            {
                            int n = 1;
                            printf("n = %d\n", n);
                            f(n);
                            printf("n = %d\n", n);

                            return 0;
                            

                            }

                            According to cppreference.com, references were added as early as 1985, and the compiler used above was 2.0, (c) 1990. Its not impossible that Borland added references before that, but them removed them later. Or added them at a later date when their C++ tools came out.

                            1 Reply Last reply
                            0
                            • Richard Andrew x64R Richard Andrew x64

                              It was an early version of Borland Turbo C for DOS. Maybe they added the reference feature to the language?

                              The difficult we do right away... ...the impossible takes slightly longer.

                              J Offline
                              J Offline
                              Jochen Arndt
                              wrote on last edited by
                              #14

                              I have learned C programming with Turbo C in the late 1980's and can't remember that it supported references. Turbo C was discontinued as stand alone product in 1990 and the C compiler was included with Turbo C++ 1.0. So you probably used that.

                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • World
                              • Users
                              • Groups