вторник, 2 марта 2010 г.

Склейка

Оказывается у Си-шного препроцессора есть операция склейка ##.

пример №1 :

#define VAR(a,b) a##b

int main (int arg, char* argv[])
{
int VAR (k,31)=10;
printf ( "Source [%d]\n", k31 );
return 0;
}


пример №2 :

#include
#define STR(NAME, STRING, NUM, BYTES...) struct { char bytes[NUM]; char string[sizeof(STRING)]; \
} NAME##_tmp_s = {{BYTES}, STRING}; \
char *NAME = (char*)&NAME##_tmp_s

#define VAR1 35 /* то же, что и '#' */
#define VAR2 32 /* то же, что и ' ' */

int main()
{
STR(str, 'hello', 2, VAR1, VAR2); /* получим аналог char *str = '# hello'; */
STR(str2, 'hello', 1, VAR1); /* получим аналог char *str2 = '#hello'; */
printf(''%s'\n', str);
printf(''%s'\n', str2);
return 0;
}"


Комментариев нет:

Отправить комментарий