Czy gwarantuje, że literały ciągów są przechowywane w pamięci?Czy literały łańcuchów sąsiadują z sobą w pamięci?
Dlatego robi poniżej koniecznie dostać wyjście hellohello
printf(3 + "%d");
printf("hello");
Czy gwarantuje, że literały ciągów są przechowywane w pamięci?Czy literały łańcuchów sąsiadują z sobą w pamięci?
Dlatego robi poniżej koniecznie dostać wyjście hellohello
printf(3 + "%d");
printf("hello");
Nie, literały ciągów znaków są przechowywane gdziekolwiek swoje fantazje kompilatora. Fakt, że zadeklarowałeś dwa z nich w kolejnych wierszach, jest nieistotny. Nie można założyć, że kompilator je zapisze.
Kompilator może robić różne rzeczy. Na przykład, jeśli piszesz następujący kod
printf("hello");
printf("hello");
następnie kompilator jest całkowicie na wolności, aby utworzyć tylko jedno dosłowne. Albo nie.
Pierwsze stwierdzenie jest niezdefiniowanym zachowaniem, więc nie masz gwarancji. – GManNickG
Zgodnie z ogólną zasadą, prawie nic nie jest gwarantowane w C i jeśli wygląda źle, to prawdopodobnie nieokreślone zachowanie. – hugomg
Gwarantowane jest wiele rzeczy w C, @missingno. To całe znaczenie Standardu ... – pmg