#define konkatenacja

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:

 #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?

0

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

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

2

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

#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;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1