"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
在这个例子中,我们有同名的函数和宏,但它仍然可以编译,因为这里的预处理没有破坏它。
我试图在 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
在这个例子中,我们有同名的函数和宏,但它仍然可以编译,因为这里的预处理没有破坏它。