C函数类似于宏:期望一个表达式

时间:2014-01-19 16:52:12

标签: c function macros

有人可以帮助我,因为我不知道这个世界是怎么回事 所以基本上这就是我正在努力完成这些功能

#define LOWCONVERT(c) (if(isupper(c) > (0) \
                   isupper(c) == (0))

上面的宏应该将大写字母转换为小写字符

应该比较两个数字的第二个宏是:

#define COMPARISON(d,f) (if (d > f))\
                    printf("d is greater than f\n");\
                    else\
                        if (d == f)\
                    printf("d equals f\n");\
                    else\
                        if(d < f)\
                        printf("d is smaller than f\n");)

当我使用它时,它给了我: “错误:预期表达”

2 个答案:

答案 0 :(得分:3)

if用于语句,而不用于表达式。左括号开始表达。

GCC启用名为statement expressions的扩展程序。

您最好使用inline functions。 (宏非常顽皮,使用方式如COMPARISON(i++,t[i--]) ...)

您应该#include <ctype.h>并使用tolower(3)isalpha(3)

等功能

请求编译器向您显示预处理表单。使用GCC,使用gcc -C -E yoursource.c > yoursource.i然后使用编辑器或寻呼机查看yoursource.i内部(例如less yoursource.i ...)

不要忘记启用调试信息&amp;编译器中的所有警告。使用GCC,这意味着使用gcc -Wall -g

进行编译

答案 1 :(得分:3)

您不能将语句用作表达式。如果要在宏中对多个语句进行分组,常见的方法是使用do...while循环:

#define COMPARISON(d, f)                     \
    do {                                     \
        if ((d) > (f))                       \
            printf("d is greater than f\n"); \
        else if ((d) == (f))                 \
            printf("d equals f\n");          \
        else if((d) < (f))                   \
            printf("d is smaller than f\n"); \
    } while (0)

另请注意,我将宏参数的用法放在括号内,或者参数可能包含导致比较操作失败的表达式。