我试图在 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
最佳答案
即使在编译之前也会检查函数语法,会进行预处理,所有宏都会被展开。
因为你定义了如下多个宏:
#define multiply(n1, n2) (n1 * n2)
在预处理过程中,乘法将被替换为 (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 - "Expected identifier or ' ( ' before int"尝试同时使用定义和函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34470846/