C宏类型变量

时间:2017-08-15 20:55:46

标签: c macros c-preprocessor

我对C比较陌生,正在尝试不同的事情。

我有一个C test.c脚本,我认为这样可以明确我的期望和目标:

#define TYPE float

__declspec(dllexport)
TYPE VectorVectorDot(TYPE u[], TYPE v[]){
    TYPE result = 0.0;
    for (int i = 0; i < 10; i++){
      result += v[i]*u[i];
    }
    return result;
}

我知道float是一个关键字,但我假设C预处理器或多或少是模板处理器,宏变量被有效地视为文本,在编译之前预处理器解析脚本并简单地替换一个#define变量,带有它的字符串值,不关心关键字,也不关心编译阶段的那些。然而,这似乎并非我所了解的情况。

尝试gcc -c test.c会导致warning: useless type name in empty declaration后跟error: unknown type name 'u'

这是如何完成的(在编译之前以某种方式设置类型)?

编辑:在函数参数之间放置逗号解决了初始错误。现在,通过代码(上面更新),我得到warning: useless type name in empty declaration,然后是error: unknown type name 'u'。因此,在我看来,预处理器正在寻找与语法有关的事情,而不是仅仅用TYPE天真地推翻float的所有实例。是这种情况吗?

1 个答案:

答案 0 :(得分:4)

问题不在于宏,而是在你的函数原型中,你错过了参数之间的逗号。

所以改变这个:

TYPE VectorVectorDot(TYPE u[] TYPE v[])

到此:

TYPE VectorVectorDot(TYPE u[], TYPE v[])