Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #163260

on confusing procedure names with the address of procedures

From Meredith Montgomery <mmontgomery@levado.to>
Newsgroups comp.lang.c
Subject on confusing procedure names with the address of procedures
Date 2021-10-29 21:37 -0300
Organization Aioe.org NNTP Server
Message-ID <86bl37e49v.fsf@levado.to> (permalink)

Show all headers | View raw


I wrote

--8<---------------cut here---------------start------------->8---
int main()
{
  char c1;
  
  printf("c1 is at %p\n", &c1);
  printf("and the addr of the addr of c1 is at %p\n", &&c1);
}
--8<---------------cut here---------------end--------------->8---

and I didn't this to make any sense.  Indeed, I get

--8<---------------cut here---------------start------------->8---
%make nonsense
gcc     nonsense.c   -o nonsense
nonsense.c: In function 'main':
nonsense.c:12:3: error: label 'c1' used but not defined
   12 |   printf("c1 is at %p\n", &&c1);
      |   ^~~~~~
make: *** [<builtin>: nonsense] Error 1
%
--8<---------------cut here---------------end--------------->8---

The error message totally lost me.

But then I wrote

--8<---------------cut here---------------start------------->8---
#include <stdio.h>
int main()
{
  printf("main is at %p\n", main);
  printf("main is at %p\n", &main);
}
--8<---------------cut here---------------end--------------->8---

and I expected a compilation error of some sort, but I got

--8<---------------cut here---------------start------------->8---
%CFLAGS=-Wall make main-addr
gcc -Wall    main-addr.c   -o main-addr

%./main-addr.exe
main is at 00007ff617431594
main is at 00007ff617431594
%
--8<---------------cut here---------------end--------------->8---

So main must be stored at 00007ff617431594 and so it becomes unintuitive
that getting the address of main yields the same value.  

My interpretation of this last program is that

  main = &main

but for the first program

  &c1 =/= & &c1

because the right side is nonsensical?  It's trying to get the address
of an address, when we should only get the address of a name.  Can't get
the address of numbers.

Pretty confusing.

Back to comp.lang.c | Previous | NextNext in thread | Find similar | Unroll thread


Thread

on confusing procedure names with the address of procedures Meredith Montgomery <mmontgomery@levado.to> - 2021-10-29 21:37 -0300
  Re: on confusing procedure names with the address of procedures Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-10-29 18:29 -0700
  Re: on confusing procedure names with the address of procedures Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-10-29 18:33 -0700
  Re: on confusing procedure names with the address of procedures Manfred <noname@add.invalid> - 2021-10-30 05:32 +0200
    Re: on confusing procedure names with the address of procedures James Kuyper <jameskuyper@alumni.caltech.edu> - 2021-10-30 01:26 -0400
      Re: on confusing procedure names with the address of procedures Manfred <noname@add.invalid> - 2021-10-30 19:05 +0200
        Re: on confusing procedure names with the address of procedures James Kuyper <jameskuyper@alumni.caltech.edu> - 2021-10-30 15:17 -0400
  Re: on confusing procedure names with the address of procedures Bart <bc@freeuk.com> - 2021-10-30 11:36 +0100
  Re: on confusing procedure names with the address of procedures Noob <root@127.0.0.1> - 2021-11-01 13:03 +0100

csiph-web