From what I’m able to understand:

  • declaration is when prototype or declaration is used to describe the features
  • definition is when a declaration is also assigned a literal or an object, such that a chunk of memory is allocated
  • initialization is the assignment of an object, either during definition or immediately after declaration
  • assignment is the setting of a value of a particular object at any stage of the program execution

Which of the follow terms overlap? Which of them is a superset/subset of each other?

  • I would define them as follows:

    • Declaration: This thing exists.
    • Definition: Here are the details for how this thing works.
    • Initialization: Assign the initial state to this thing.
    • Assignment: The value of this thing is now X.
  • My understanding:

    int a = 1;
       // variable definition =
       // declaration + initialisation
    
    int b; // variable declaration
    
    b = 2  // variable initialisation,
           // type of assignment
    
    a = 3  // variable assignment
    
    int f(int x, int y);
       // function declaration
    
    int g(int z) {
       return z;
    }  // function definition
    
    int f(int x, int y) {
       return x + y;
    }  // function definition
    
  • Initialization is a subset of assignment. Its initialization the first time you do an assignment.

    I dont think declaration and definition overlap, but they are similar concepts. I think i would have swapped your descriptions though. Normally you have a function definition, which describes the function and its features, and you have variable declarations, which is literal objects/bits of memory.

    Please dont take this response as gospel, i am not super happy with it :/