confused between declaration & definition

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • arnuld

    #1

    confused between declaration & definition

    1) int i = 3;
    2.) int* pi;
    3.) int* pi2 = &i
    4.) char* pc;
    5.) char c;
    6) char c2 = 'a'
    7.) char* pc2 = &c2
    8.) char* ps = "Stroustrou p";
    9.) extern double d;

    2, 4 & 9 are the only declarations here. right ?

    i know that 1, 3, 5, 6, 7, 8 are definitions but can we call them
    declarations too?

    Is 2 a legal declaration?

    i dont understand the difference between 7 & 8.

  • Alf P. Steinbach

    #2
    Re: confused between declaration & definition

    * arnuld:
    1) int i = 3;
    2.) int* pi;
    3.) int* pi2 = &i
    4.) char* pc;
    5.) char c;
    6) char c2 = 'a'
    7.) char* pc2 = &c2
    8.) char* ps = "Stroustrou p";
    9.) extern double d;
    >
    2, 4 & 9 are the only declarations here. right ?
    All are declarations, but only 9 is a pure declaration (not a definition).

    i know that 1, 3, 5, 6, 7, 8 are definitions but can we call them
    declarations too?
    Yes. Any definition is a declaration.

    Is 2 a legal declaration?
    Yes.

    i dont understand the difference between 7 & 8.
    7 declares a pointer to char and initializes it with the address of a
    single char.

    8 declares a pointer to char and initializes it with the address of the
    first char in a zero-terminated sequence of chars (the string "Stroustrup ").

    8 is bad form (because it means you can try to modify a string literal
    without the compiler detecting that error). It's only allowed in order
    to have backwards compatibility with old C. Except for interfacing to
    old C code that requires it, you should write

    char const* ps = "Stroustrup ";

    or equivalently

    const char* ps = "Stroustrup ";



    --
    A: Because it messes up the order in which people normally read text.
    Q: Why is it such a bad thing?
    A: Top-posting.
    Q: What is the most annoying thing on usenet and in e-mail?

    Comment

    • Kai-Uwe Bux

      #3
      Re: confused between declaration & definition

      arnuld wrote:
      1) int i = 3;
      2.) int* pi;
      3.) int* pi2 = &i
      4.) char* pc;
      5.) char c;
      6) char c2 = 'a'
      7.) char* pc2 = &c2
      8.) char* ps = "Stroustrou p";
      9.) extern double d;
      >
      2, 4 & 9 are the only declarations here. right ?
      2 and 4 look like definitions to me.
      i know that 1, 3, 5, 6, 7, 8 are definitions but can we call them
      declarations too?

      Yes, the standard defines [3.1/2]:

      A declaration is a definition unless it declares a function without
      specifying the function?s body (8.4), it contains the extern specifier
      (7.1.1) or a linkage-specification (7.5) and neither an initializer nor
      a function-body, it declares a static data member in a class declaration
      (9.4), it is a class name declaration (9.1), or it is a typedef
      declaration (7.1.3), a using-declaration (7.3.3), or a using-directive
      (7.3.4).

      As you can see, every definition is a declaration.

      Is 2 a legal declaration?
      Looks legal to me. Did you run it by your compiler?

      i dont understand the difference between 7 & 8.
      8 is a special case since the right hand side is really const. Usually, when
      you define a T*, you are allowed to modify the pointee; and any attempt to
      define a T* so that it points to a (an array of) T char should fail. In
      order to support C code, there are special provisions for char*.


      Best

      Kai-Uwe Bux

      Comment

      • Victor Bazarov

        #4
        Re: confused between declaration & definition

        Alf P. Steinbach wrote:
        * arnuld:
        >1) int i = 3;
        >2.) int* pi;
        >3.) int* pi2 = &i
        >4.) char* pc;
        >5.) char c;
        >6) char c2 = 'a'
        >7.) char* pc2 = &c2
        >8.) char* ps = "Stroustrou p";
        >9.) extern double d;
        >>
        >2, 4 & 9 are the only declarations here. right ?
        >
        All are declarations, but only 9 is a pure declaration (not a
        definition).
        It depends on the context. 2, 4, 5, can also be declarations if
        they happen to be inside a class definition.
        >[..]
        V
        --
        Please remove capital 'A's when replying by e-mail
        I do not respond to top-posted replies, please don't ask


        Comment

        Working...