Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Макросы


Автор: shad0w 10.3.2006, 01:30
Вот простой код:
Код
#include <stdio.h>

#define F00(a) (a.t1)

struct TEXT{
    char * t1;
};

struct TEXT s;

int main()
{
    s.t1="qqqqqqqqqqq";
    printf("%s\n",F00(s));
    
    char * smbl = "ssssss";

    return 0;
}



Возможно ли зделать так, чтоб вот тут #define F00(a) (a.t1), а бралось со строки smbl? Тоесть, чтоб в качестве параметра F00 брался символ со строки smbl?

Автор: kondr 10.3.2006, 14:02
Конечно нет. Макрос просто заменяет некоторый текст (который ты указываешь после #define) на другой текст.

Вот эта строка printf("%s\n",F00(s)) после подстановки преобразуется в printf("%s\n",s.tl).
Если б ты написал printf("%s\n",F00(ёклмн)) оно бы преобразовалось в printf("%s\n",еклмн.tl) ну и естественно потом бы не скомпилировалось.

Так что все это происходит на фазе анализа текста. Как ты себе представляешь подстановку символа из строки, которой еще физически не существует?

Автор: Neitron 10.3.2006, 14:10
В с++ нет что-то типо eval как в javascript или php.
И оно нафиг не нужно. Чтобы добиться того что ты хочешь, можно заюзать map

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)