c - "Expected identifier or ' ( ' before int"尝试同时使用定义和函数时出错

标签 c function c-preprocessor

我试图在 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/

相关文章:

c - fatal error : addFunc. h:没有那个文件或目录

c - 使用结构数组创建 "card"的函数

c - 我如何分发(开源)Vala 项目?

objective-c - 在 Objective C 中使用 '^' 符号

c - 如何修改已传递给 C 函数的指针?

c - 正确地字符串化和连接宏参数

CLion 无法解析所有宏

c - 无法从 C 中的 argv[1] 获取文件名

r - R包中的C函数-函数结束时Rsession中止

function - Clojure - 测试函数表达式的相等性?