c - 使用一组运算符在 C 中定义宏

标签 c macros

我在编程方面相对较新,我试图通过以下方式定义一个名为 OPERATORS 的宏:

#define OPERATORS {'+', '-','*', '/', '%', '^'}

这个,目的是制作以下程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define OPERATORS {'+', '-','*', '/', '%', '^'}

int isOperator (char c) {
    if(c!=OPERATORS)
        return 0;
    return 1;
}

int main(){
    printf("%d", isOperator('+'));
    printf("%d", isOperator('j'));
    return 0;
}

要知道字符 c 是否是运算符。 但是我在编译器方面遇到了问题,我确定这与宏的声明有关。所以我的问题是:

如何使用一组运算符定义宏以及我应该如何使用它?? “因为我几乎可以肯定,要将变量与宏进行比较,应该以不同的方式进行 抱歉我的无知,非常感谢!!!

最佳答案

宏只做文本替换,所以你的代码实际上等同于:

int isOperator (char c) {
    if (c != {'+', '-','*', '/', '%', '^'})
        return 0;

    return 1;
}

这是无效的 C 代码,您不能将 char 与无论如何都没有意义的字符数组进行比较。

你想要这个:

#include <stdio.h>
#include <stdlib.h>

int isOperator(char c) {
  static char operators[] = { '+', '-','*', '/', '%', '^' };
  for (int i = 0; i < sizeof operators; i++)
    if (c == operators[i])
      return 1;

  return 0;
}

int main() {
  printf("%d\n", isOperator('+'));
  printf("%d\n", isOperator('j'));
  return 0;
}

或者更短:

...
#include <string.h>
...
int isOperator(char c) {
  char operators[] = "+-*/%^";
  return strchr(operators, c) != NULL;
}

关于c - 使用一组运算符在 C 中定义宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60418189/

相关文章:

macros - 如何使用 defmacro 简化一些代码

macros - lisp 宏乘法在看到 0 时停止计算

c++ - 如何处理遗留代码中的方法名称重复

c - 使用尾随指针将节点插入链表 C

c - 在c中使用sin函数得到错误的值

c++ - 我是否检查带或不带括号的宏函数的存在?

c++ - 新的 __LINE__ 什么时候开始?

c - 使用 i++(或++i)真的是一个好习惯吗?

c++ - 二叉树的最小高度?

c - 如何用 Libxml2 解析 XML 空节点?在 C 中