Wpis z mikrobloga

Jeśli mam w językach programowania #c #cpp słowo static, to wtedy kod tych funkcji i zmiennych leci do exe do "data" tak czytałem.

A jak to wygląda w przypadku #csharp ? Jeśli mam jedną funkcje w przestrzeni nazwa, jednej klasy, to dostaje output dll i exe, i mimo, że jest static, to usuwając dll, program nie działa, czyli w csharp działa to jakoś inaczej.

Ale jak?

#programowanie #linux #windows #pytaniedoeksperta
  • 8
@pyroxar: Czy ty przypadkiem teraz nie mylisz typu statycznego czyli coś co musi mieć swoją reprezentacje w każdej jednostce kompilacyjnej (czy jakoś tak), która z niego korzysta z dynamiczną biblioteką czyli tzw. wtyczką z prekompilowanym kodem? ( ͡° ʖ̯ ͡°)
@pyroxar: Kod możesz skompilować do jednego pliku exe lub biblioteki, więc w praktyce zależy tutaj to od tego procesu. Z tego co się orientuje to dane static są trzymane tez w sekcji data.
Jeśli mam w językach programowania #c #cpp słowo static, to wtedy kod tych funkcji i zmiennych leci do exe do "data" tak czytałem.


@pyroxar: ło panie. w cpp masz z 10 różnych zastosowań i znaczeń static
- static free function
- static member function
- (inline) (constexpr) static global variable
- static variable inside function
- (inline) (constexpr) static member variable

pewnie coś jeszcze przeoczyłem. zachowują się one totalnie inaczej, nie
tych funkcji i zmiennych leci do exe do "data"


@pyroxar: nie, do text jak każdej innej funkcji.

W C bez plusa static ogranicza widoczność symbolu do tej samej jednostki kompilacji (zazwyczaj plik .c) i jeżeli jest name clash będzie mangling czyli kompilator przezwie symbol dodając nazwę jednostki kompilacji/id czy jak ma to zakodowane.
Dobrą praktyką jest deklarowanie wszystkich funkcji jako static chyba że mają być widoczne poza danym plikiem .c czyli