高分在线等,我定义了一个字符串,它与#define定义的宏名相同,请问如何取得我定义的字符串对应的宏的值?具体看代码先有定义:
#define MY_TEST  100我现在只有如下同名字符串,但是我想通过strTest获得值100,如果同名的宏(MY_TEST)不存在,只返回-1,有没有简单的方法来实现?
char strTest[] = MY_TEST;

解决方案 »

  1.   

    如果同名的宏(MY_TEST)不存在,只返回-1,有没有简单的方法来实现? 
    char strTest[] = MY_TEST;--#ifndef MY_TEST
    char strTest[0] = -1;
    #else
    char strTest[0] = MY_TEST;
    #endif
      

  2.   

    我的strTest是个变量,不一定是MY_TEST,像这样的话,我要写太多的这种东东了,不合适
      

  3.   


    #define MY_TEST  100 #ifndef MY_TEST 
    const int my_test = -1;
    #else
    const int my_test = MY_TEST;char strTest[] = my_test;
    ...
    and so on
      

  4.   

    应该不能实现,除非用条件语句进行判断,然后赋值,那样很麻烦,应该不是LZ想要的!我曾经也有过类似的想法,想通过字符串变量(为一些函数名),来调用函数,最终失败没实现。
    #define CALLMYFUNC(FunName) FunName(参数表);
    借LZ的光,顺便问下有没有高手能实现这样的宏定义,呵呵!!!!!!!
      

  5.   

    #define FX(FUNK,LEN,BIN,DO) if(!_memicmp(p,FUNK,LEN)) { move = LEN + Funk(p+LEN,BIN,x,y); { DO; } }cCompl cCalc::GetNumber(char* p, int& move)
    {
    cCompl x, y;
    switch (tolower(*p))
    {
    case 'a':
    FX("abs(", 4, 0, return abs(x););
    FX("asin(", 5, 0, if(gra) return asin(x) * 360 / (2 * PI); return asin(x););
    FX("acos(", 5, 0, if(gra) return acos(x) * 360 / (2 * PI); return acos(x););
    FX("atan(", 5, 0, if(gra) return atan(x) * 360 / (2 * PI); return atan(x););
      

  6.   

    楼主是不是想达到这样的效果:
         #define "MY_TEST" 100
    或者想找到一个宠定义,我们假定是这样:
         #define TO_INT("MY_TEST") 100;
    也就是想把一个常量字符串通过宏来直接转化为一个整数值;
        效果这样:
        int iv=TO_INT("MY_TEST");
    如果定义了宏#define MY_TEST 100,则iv==100;如果没有定义宏MY_TEST,则iv==-1;
    甚至是通过定义一个字符串变量来直接获得整型值
        char strTest[]="MY_TEST";
        int iv=TO_INT(strTest);
    同样如果定义了宏#define MY_TEST 100,则iv==100,否则iv==-1;
    说白了,你想在编译期实现字符串下标数组,或者map的功能.
    不知道我这样理解对不对?
    我个人感觉有点不可能!!
      

  7.   

    可以实现,没有任何问题                         #define MY_TEST  100 
    #ifndef MY_TEST
    temp=-1;
    #else
    temp = MY_TEST;
    #endif          iLength=sprintf(buff,"temp=%i",temp);
            TextOut(hdc,0,0,buff,iLength);
      

  8.   

    俺可以负责任地说:no way另外俺再弱弱地问:这样有毛用?宏只是一助记符,在编译期间有效,运行期间无宏或宏替换一说。这是VB和VC的差别。俺顶11楼一下。