"Expected identifier or '(' before int" 尝试同时使用 define 和 functions 时出错

"Expected identifier or '(' before int" error while trying to use define and functions together

我试图在 C 中使用 define with 函数,但是 multiply 函数的第一行有一个错误。当我 运行 它没有定义时它工作。

#include <stdio.h>

#define multiply(n1, n2) (n1 * n2)

// multiply function returns multiplication of two integers
int multiply(int number1, int number2) { //Error in this line
    return number1 * number2;
}

int main() {

    // Printing multiply(n1, n2)
    printf("%d\n", (3 * 2) );

    system("pause");
} // End main

错误发生是因为 multiply 已经定义为宏。然后你试图将 multpily 重新定义为一个函数。

尝试更改他们的任何一个名字。它应该修复错误。

即使在编译之前也会检查函数语法,会进行预处理并展开所有宏。

因为您定义了如下多个宏:

#define multiply(n1, n2) (n1 * n2)

multiply 将在预处理期间替换为 (n1*n2)。 因此, call 看起来像。 预处理前

int multiply(int number1, int number2) { //Error in this line
    return number1 * number2;
}

预处理后:

int (int number1*int number2) { //Error in this line
    return number1 * number2;
}

这在 C 中无效。

具有与函数同名的宏没有问题。如果您像下面这样更改您的宏:您的程序将编译。

#include <stdio.h>

#define multiply my_mult //pre-processing will not break function 

// multiply function returns multiplication of two integers
int multiply(int number1, int number2) { //Error in this line
    return number1 * number2;
}

int main() {

    // Printing multiply(n1, n2)
    printf("%d\n", (3 * 2) );

    system("pause");
} // End main

在这个例子中,我们有同名的函数和宏,但它仍然可以编译,因为这里的预处理没有破坏它。