define side effects

Discussion in 'C Programming' started by Niklaus, May 5, 2004.

  1. Niklaus

    Niklaus Guest

    This is one of the posts that i got.
    ------------------------------
    A "side effect" of an operation is something that
    *happens*, not something that *is produced*. Examples:
    In the expression 2+2, the value 4 *is produced*. Nothing
    *happens*.
    Thus, 4 is the value of the expression, and it has no side effects.
    In the expression g=2.0, the value 2.0 is produced. What *happens*
    is that 2.0 is assigned to g. Thus, 2.0 is the value of the
    expression,
    and its side effect is to assign 2.0 to g.
    In the expression (int)g, the value 2 is produced. Nothing happens.
    Thus, 2 is the value of the expression (int)g, and it has no side
    effects.
    In the expression (a=1,++a), the value 2 is produced. What happens
    is that first 1 is assigned to a, and then a is incremented; those are
    the side effects of the expression.
    -----------------------------

    This seems to be a good definition in most of the cases.

    I argue that in k=(int)2.0 , 2 is produced and the truncation of 2.0
    -> 2 is that happens. I am really confused. Can some one give me a
    more clear definition of side effects ?

    If i apply the same definition to i=j++ where j=3 then i=3 and j=4
    are the side effects and value 3,4 are produced. Am i correct ? Can
    someone throw more light on how to define side effects without
    ambiguity ?

    -
    Nik
     
    Niklaus, May 5, 2004
    #1
    1. Advertising

  2. Niklaus

    Richard Bos Guest

    (Niklaus) wrote:

    > This is one of the posts that i got.
    > ------------------------------
    > A "side effect" of an operation is something that
    > *happens*, not something that *is produced*. Examples:
    > In the expression 2+2, the value 4 *is produced*. Nothing
    > *happens*.
    > Thus, 4 is the value of the expression, and it has no side effects.
    > In the expression g=2.0, the value 2.0 is produced. What *happens*
    > is that 2.0 is assigned to g. Thus, 2.0 is the value of the
    > expression,
    > and its side effect is to assign 2.0 to g.
    > In the expression (int)g, the value 2 is produced. Nothing happens.
    > Thus, 2 is the value of the expression (int)g, and it has no side
    > effects.
    > In the expression (a=1,++a), the value 2 is produced. What happens
    > is that first 1 is assigned to a, and then a is incremented; those are
    > the side effects of the expression.
    > -----------------------------
    >
    > This seems to be a good definition in most of the cases.
    >
    > I argue that in k=(int)2.0 , 2 is produced and the truncation of 2.0
    > -> 2 is that happens.


    No; the 2.0 is not changed. Nothing happens "behind the scenes"; the
    value 2.0 does get truncated, but only for the direct reason of
    calculating the value of the expression. Assigning this truncated value
    to k _is_ a side effect.

    > I am really confused. Can some one give me a more clear definition
    > of side effects ?


    Well, according to the Standard,

    # [#2] Accessing a volatile object, modifying an object,
    # modifying a file, or calling a function that does any of
    # those operations are all side effects, which are changes
    # in the state of the execution environment.

    Whether that is more clear, well... it's unambiguous, anyway.

    > If i apply the same definition to i=j++ where j=3 then i=3 and j=4
    > are the side effects and value 3,4 are produced. Am i correct ?


    No; 4 is never produced. j is increased to 4, but that value is never
    passed on to any other sub-expression; its previous value, 3, is.

    Richard
     
    Richard Bos, May 5, 2004
    #2
    1. Advertising

  3. Niklaus

    Gautam Guest

    (Richard Bos) wrote in message news:<>...
    > (Niklaus) wrote:
    >
    > > This is one of the posts that i got.
    > > ------------------------------
    > > A "side effect" of an operation is something that
    > > *happens*, not something that *is produced*. Examples:
    > > In the expression 2+2, the value 4 *is produced*. Nothing
    > > *happens*.
    > > Thus, 4 is the value of the expression, and it has no side effects.
    > > In the expression g=2.0, the value 2.0 is produced. What *happens*
    > > is that 2.0 is assigned to g. Thus, 2.0 is the value of the
    > > expression,
    > > and its side effect is to assign 2.0 to g.
    > > In the expression (int)g, the value 2 is produced. Nothing happens.
    > > Thus, 2 is the value of the expression (int)g, and it has no side
    > > effects.
    > > In the expression (a=1,++a), the value 2 is produced. What happens
    > > is that first 1 is assigned to a, and then a is incremented; those are
    > > the side effects of the expression.
    > > -----------------------------
    > >
    > > This seems to be a good definition in most of the cases.
    > >
    > > I argue that in k=(int)2.0 , 2 is produced and the truncation of 2.0
    > > -> 2 is that happens.

    >
    > No; the 2.0 is not changed. Nothing happens "behind the scenes"; the
    > value 2.0 does get truncated, but only for the direct reason of
    > calculating the value of the expression. Assigning this truncated value
    > to k _is_ a side effect.
    >
    > > I am really confused. Can some one give me a more clear definition
    > > of side effects ?

    >
    > Well, according to the Standard,
    >
    > # [#2] Accessing a volatile object, modifying an object,
    > # modifying a file, or calling a function that does any of
    > # those operations are all side effects, which are changes
    > # in the state of the execution environment.
    >
    > Whether that is more clear, well... it's unambiguous, anyway.
    >
    > > If i apply the same definition to i=j++ where j=3 then i=3 and j=4
    > > are the side effects and value 3,4 are produced. Am i correct ?

    >
    > No; 4 is never produced. j is increased to 4, but that value is never
    > passed on to any other sub-expression; its previous value, 3, is.
    >
    > Richard



    regarding side - effects
    what exactly does this sequence 'point mean'
     
    Gautam, May 5, 2004
    #3
  4. Gautam <> scribbled the following:
    > (Richard Bos) wrote in message news:<>...
    >> (Niklaus) wrote:
    >>
    >> > This is one of the posts that i got.
    >> > ------------------------------
    >> > A "side effect" of an operation is something that
    >> > *happens*, not something that *is produced*. Examples:
    >> > In the expression 2+2, the value 4 *is produced*. Nothing
    >> > *happens*.
    >> > Thus, 4 is the value of the expression, and it has no side effects.
    >> > In the expression g=2.0, the value 2.0 is produced. What *happens*
    >> > is that 2.0 is assigned to g. Thus, 2.0 is the value of the
    >> > expression,
    >> > and its side effect is to assign 2.0 to g.
    >> > In the expression (int)g, the value 2 is produced. Nothing happens.
    >> > Thus, 2 is the value of the expression (int)g, and it has no side
    >> > effects.
    >> > In the expression (a=1,++a), the value 2 is produced. What happens
    >> > is that first 1 is assigned to a, and then a is incremented; those are
    >> > the side effects of the expression.
    >> > -----------------------------
    >> >
    >> > This seems to be a good definition in most of the cases.
    >> >
    >> > I argue that in k=(int)2.0 , 2 is produced and the truncation of 2.0
    >> > -> 2 is that happens.

    >>
    >> No; the 2.0 is not changed. Nothing happens "behind the scenes"; the
    >> value 2.0 does get truncated, but only for the direct reason of
    >> calculating the value of the expression. Assigning this truncated value
    >> to k _is_ a side effect.
    >>
    >> > I am really confused. Can some one give me a more clear definition
    >> > of side effects ?

    >>
    >> Well, according to the Standard,
    >>
    >> # [#2] Accessing a volatile object, modifying an object,
    >> # modifying a file, or calling a function that does any of
    >> # those operations are all side effects, which are changes
    >> # in the state of the execution environment.
    >>
    >> Whether that is more clear, well... it's unambiguous, anyway.
    >>
    >> > If i apply the same definition to i=j++ where j=3 then i=3 and j=4
    >> > are the side effects and value 3,4 are produced. Am i correct ?

    >>
    >> No; 4 is never produced. j is increased to 4, but that value is never
    >> passed on to any other sub-expression; its previous value, 3, is.


    > regarding side - effects
    > what exactly does this sequence 'point mean'


    It's a point during the evaluation of an expression, when all side
    effects are guaranteed to have taken place. Sequence points include:
    - The terminating ; in a statement
    - The && and || operators
    - The ?: operator
    - The , operator
    Also, AFAIK when a function is called, its entry point forms a
    sequence point for the expressions in its arguments.

    --
    /-- Joona Palaste () ------------- Finland --------\
    \-- http://www.helsinki.fi/~palaste --------------------- rules! --------/
    "You could take his life and..."
    - Mirja Tolsa
     
    Joona I Palaste, May 5, 2004
    #4
  5. Niklaus

    Neil Kurzman Guest

    Simply

    The same as in medicine. A drug cures one problem, but causes another.

    In code you fix one bug, but cause another.
     
    Neil Kurzman, May 8, 2004
    #5
  6. On Sat, 8 May 2004, Neil Kurzman wrote only:
    >
    > Simply
    > The same as in medicine. A drug cures one problem, but causes another.
    > In code you fix one bug, but cause another.


    An interesting quotation, but why do you say so? If this is
    supposed to be a new topic of discussion (incidentally, one more
    suited to comp.programming than comp.lang.c, which is dedicated
    specifically to fixing bugs in *C* code :) then you might have
    considered starting a new thread rather than piggybacking on an
    existing one.
    We've seen people here before who apparently thought they should
    "conserve threads" by posting irrelevant replies to old threads;
    that's really not necessary.
    And if you *didn't* mean your reply to be irrelevant to the old
    thread, then you ought to have quoted some context so people could
    tell to what you were responding. Google "usenet faq" for more
    information.

    -Arthur
     
    Arthur J. O'Dwyer, May 8, 2004
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jim Bancroft
    Replies:
    2
    Views:
    2,472
    =?Utf-8?B?UmFodWwgQW5hbmQ=?=
    Dec 28, 2004
  2. Anonieko
    Replies:
    0
    Views:
    1,981
    Anonieko
    Aug 12, 2005
  3. VisionSet
    Replies:
    7
    Views:
    486
    Michael Rauscher
    Nov 9, 2004
  4. Jason Heyes
    Replies:
    10
    Views:
    555
    red floyd
    Dec 21, 2004
  5. Giuseppe

    Re: Newbie-Side effects?

    Giuseppe, Jun 24, 2003, in forum: C Programming
    Replies:
    0
    Views:
    1,180
    Giuseppe
    Jun 24, 2003
Loading...

Share This Page