#define konkatenacja

#define konkatenacja
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

Witajcie,

Mam za zadanie napisać prosty programik wykonujący kontkatenację dwóch stringów za pomocą define. Długo się nad tym męczyłem i za chiny nie chciało działać. Przy pomocy stackoverflow skombinowałem taki programik:

Kopiuj
 #include <stdio.h>

#define CONCAT1(X, Y) X ## Y
#define CONCAT(X, Y) CONCAT1(X, Y)
#define PRINT1(X) #X
#define PRINT(X) PRINT1(X)

#define A abc
#define B ttt

int main(void) {
    printf("%s", PRINT(CONCAT(A, B)));
    return 0;
}

W takiej postaci działa. Mam dwa pytania. Dlaczego muszą być dwie funkcje, gdzie jedna wywołuje drugą (CONCAT -> CONCAT1 oraz PRINT -> PRINT1). Bez tego nie zadziała... Po drugie program działa tylko, gdy tekst jest w stałych, czy da się w ogóle przepisać to na zmienne?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

czy da się w ogóle przepisać to na zmienne?

Tak, wykorzystując funkcje. definey rozwiązywane są przed kompilacją.

  • Rejestracja: dni
  • Ostatnio: dni
2

Twój program nie konkatenuje łańcuchów tylko identyfikatory. Brakuje "" wokół abc i ttt.

Kopiuj
#include <stdio.h>

#define CONCAT(X, Y) X Y

#define A "abc"
#define B "ttt"

int main(void) {
    printf("%s", CONCAT(A, B));
    return 0;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.