The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Token concatenation"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Token concatenation"  +/
Сообщение от pavlinux (ok) on 28-Июл-11, 02:12 
Ни нада больше.
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Token concatenation"  +/
Сообщение от pavlinux (ok) on 28-Июл-11, 02:30 
Керигану с Ричей надо яйцы оторвать...
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Token concatenation"  +/
Сообщение от pavlinux (ok) on 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 "."

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Token concatenation"  +/
Сообщение от gpl77 (ok) on 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 у вас не тот :-)
это метка структуры, а не переменная

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "Token concatenation"  +/
Сообщение от pavlinux (ok) on 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

---

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

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Token concatenation"  +/
Сообщение от JohnProfic (ok) on 30-Июл-11, 21:49 
> Угадайте, что должно быть вместо '##' ?

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

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Token concatenation"  +/
Сообщение от pavlinux (ok) on 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

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Token concatenation"  +/
Сообщение от gpl77 (ok) on 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

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Token concatenation"  +/
Сообщение от pavlinux (ok) on 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

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

5. "Token concatenation"  +/
Сообщение от Дядя_Федор email on 29-Июл-11, 21:22 
> Никакую Галю я не пердолил.

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


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

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

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру