C/Więcej o kompilowaniu: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
Zdzichobot (dyskusja | edycje) m poprawa linków |
Nie podano opisu zmian |
||
Linia 20:
reguły...
Dzięki temu program make zna już kolejność wykonywanych działań oraz czynności, jakie ma wykonać. Aby
Należy pamiętać, by sekcji "co" nie wcinać, natomiast "reguły" wcinać dwoma spacjami. Część "od_czego" może być pusta.
Linia 65:
rm -f *.o test
Ta reguła
Możemy też ukryć wykonywane komendy albo dopisać własny opis czynności:
Linia 106:
__attribute__ ((packed))
Dzięki użyciu tego atrybutu, kompilator zostanie "zmuszony" do braku ingerencji w naszą strukturę. Jest jednak jeszcze jeden, być może bardziej elegancki sposób na obejście dopełniania. Zauważyłeś, że dopełnienie, dodane przez kompilator pojawiło się między polem o długości 8-bitów (plec) oraz polem o długości 32-bitów (dochod). Wyrównywanie polega na tym, że dana zmienna powinna być umieszczona pod adresem będącym wielokrotnością jej rozmiaru. Oznacza to, że jeśli np. mamy w strukturze na początku dwie zmienne, o rozmiarze jednego bajta, a potem jedną zmienną, o rozmiarze 4 bajtów, to pomiędzy polami o rozmiarze 2 bajtów, a polem czterobajtowym pojawi się dwubajtowe dopełnienie. Może Ci się wydawać, że jest to tylko niepotrzebne mącenie w głowie, jednak niektóre architektury (
typedef struct {
Linia 116:
W ten sposób wyrównana struktura nie będzie podlegała modyfikacjom przez kompilator oraz będzie przenośna pomiędzy różnymi kompilatorami.
Wyrównywanie działa także na
== Kompilacja skrośna ==
Linia 122:
== Inne narzędzia ==
Wśród przydatnych narzędzi, warto wymienić
man 1 objdump
|