URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9201
[ Назад ]

Исходное сообщение
"Token concatenation"

Отправлено pavlinux , 28-Июл-11 02:12 
Ни нада больше.

Содержание

Сообщения в этом обсуждении
"Token concatenation"
Отправлено pavlinux , 28-Июл-11 02:30 
Керигану с Ричей надо яйцы оторвать...

"Token concatenation"
Отправлено Дядя_Федор , 29-Июл-11 14:45 
> Керигану с Ричей надо яйцы оторвать...

Видать, у Павлинукса галоперидол закончился. :))))



"Token concatenation"
Отправлено pavlinux , 29-Июл-11 16:08 
>> Керигану с Ричей надо яйцы оторвать...
>  Видать, у Павлинукса галоперидол закончился. :))))

Никакую Галю я не пердолил.

---
Хотя, для разминки мозга можете рассказать как из одной структуры,
но в разных версиях пакета, поставить нужные члены этой структуры.

Например

struct sex {

    char *girl;
    char *boy;

}

#if ORIENTATION == 666  
      #define SELECT_HOLE(target) sex##.boy
#else
     #define SELECT_HOLE(target) sex##.girl
#endif

Вызываем

     char *fucka = SELECT_HOLE(target);


Вы выливается с ошибкой, что не понимает он token concatenation with "seх" and "."


"Token concatenation"
Отправлено gpl77 , 29-Июл-11 16:37 
>[оверквотинг удален]
> }
> #if ORIENTATION == 666
>       #define SELECT_HOLE(target) sex##.boy
> #else
>      #define SELECT_HOLE(target) sex##.girl
> #endif
> Вызываем
>      char *fucka = SELECT_HOLE(target);
> Вы выливается с ошибкой, что не понимает он token concatenation with "seх"
> and "."

sex у вас не тот :-)
это метка структуры, а не переменная


"Token concatenation"
Отправлено pavlinux , 30-Июл-11 01:37 
>[оверквотинг удален]
>>       #define SELECT_HOLE(target) sex##.boy
>> #else
>>      #define SELECT_HOLE(target) sex##.girl
>> #endif
>> Вызываем
>>      char *fucka = SELECT_HOLE(target);
>> Вы выливается с ошибкой, что не понимает он token concatenation with "seх"
>> and "."
> sex у вас не тот :-)
> это метка структуры, а не переменная

Вот, примерно так...


struct sex {
        char *boy;
        char *girl;
};

#if ALPHA == 1
struct who
{
        struct sex people;
};
#else
struct who
{
        char *people;
};
#endif

#if ALPHA == 1
        #define SELECT_HOLE(target) target##.girl  
#else
        #define SELECT_HOLE(target) target
#endif


int main(void)
{
        struct who fuck;

        char *fucka = SELECT_HOLE(fuck.people)

        // Или аналог внутри функции
        /*
        #if ALPHA == 1
                char *fucka = fuck.people.girl;
        #else
                char *fucka = fuck.people;
        #endif
        */

        return 0;
}

Компилим...


$ gcc -D ALPHA=1  test.c
test.c: In function 'main':
test.c:31:1: error: pasting "." and "." does not give a valid preprocessing token
test.c:31:16: error: expected identifier before '.' token

Делал варианты

target##.girl
target.##.girl
target.##girl
target##.##girl

---

Угадайте, что должно быть вместо '##' ?


"Token concatenation"
Отправлено JohnProfic , 30-Июл-11 21:49 
> Угадайте, что должно быть вместо '##' ?

Мне кажется или там просто должно быть (target).girl ?


"Token concatenation"
Отправлено pavlinux , 31-Июл-11 03:17 
>> Угадайте, что должно быть вместо '##' ?
> Мне кажется или там просто должно быть (target).girl ?

Что надо подставить вместо ##, в этом макросе:

#define SELECT_HOLE(target) target##.girl

чтоб вместо:

char *fucka = SELECT_HOLE(fuck.people);

получилось:

char *fucka = fuck.people.girl;


варианты могут быть такими

target##.girl
target.##.girl
target.##girl
target##.##girl


"Token concatenation"
Отправлено gpl77 , 31-Июл-11 12:29 
>>> Угадайте, что должно быть вместо '##' ?
>> Мне кажется или там просто должно быть (target).girl ?
> Что надо подставить вместо ##, в этом макросе:
> #define SELECT_HOLE(target) target##.girl
> чтоб вместо:
>  char *fucka = SELECT_HOLE(fuck.people);
>  получилось:
>  char *fucka = fuck.people.girl;
> варианты могут быть такими

а ## тут вообще не нужен
он для конкатенации аргументов макроса, а у вас он только один

сделайте просто:
#define SELECT_HOLE(target) target.girl


"Token concatenation"
Отправлено pavlinux , 01-Авг-11 21:09 
>[оверквотинг удален]
>> #define SELECT_HOLE(target) target##.girl
>> чтоб вместо:
>>  char *fucka = SELECT_HOLE(fuck.people);
>>  получилось:
>>  char *fucka = fuck.people.girl;
>> варианты могут быть такими
> а ## тут вообще не нужен
> он для конкатенации аргументов макроса, а у вас он только один
> сделайте просто:
> #define SELECT_HOLE(target) target.girl

Я код не помню, но это там точно не прокатывало

Может так было
#define SELECT_HOLE(target) some.##target##.girl


"Token concatenation"
Отправлено Дядя_Федор , 29-Июл-11 21:22 
> Никакую Галю я не пердолил.

Уффф. Ну слава Богу - ты еще не потерян для общества.


> Вы выливается с ошибкой, что не понимает он token concatenation with "seх"
> and "."

Я выливается? Я никуда не выливается.