Na wykładach jednym z przykładów, który mnie zaintrygował były takie oto linijki kodu:
char *tab_w[5]; tab_w[0] = "To jest tekst na pozycji 0"; #define TKST1 "To jest tekst na pozycji 1"; tab_w[1] = (char *) malloc(strlen(TKST1)+1); strcpy(tab_w[1], TKST1);
Zastanowiło mnie czy to aby nie zajmie dwa razy za dużo pamięci. Po krótkich testach w domu okazuje się, że (przynajmniej przy kompilacji gcc) jest to zgrabnie optymalizowane.
textAsMacro.c:
#include
#include
#include
#define TEXT "aaa"
int main(int argc, char **argv){
printf("%d\n", (int) TEXT);
printf("%d\n", (int) TEXT);
printf("%d\n", (int) "aaa");
return 0;
}
Po wywołaniu:
$ gcc -o textAsMacro.e textAsMacro.c $ ./textAsMacro.e 134513800 134513800 134513800
Działa to w obrębie tylko jednego pliku z dość oczywistych względów.