我对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
的所有实例。是这种情况吗?
答案 0 :(得分:4)
问题不在于宏,而是在你的函数原型中,你错过了参数之间的逗号。
所以改变这个:
TYPE VectorVectorDot(TYPE u[] TYPE v[])
到此:
TYPE VectorVectorDot(TYPE u[], TYPE v[])