gpt4 book ai didi

C++ 预期类型说明符错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:09:13 24 4
gpt4 key购买 nike

我正在尝试编写一个包装函数来确定谁在调用特定函数。所以在 .h 文件中我添加了以下内容:(以及在 .cc 文件中的实现)

extern int foo(/*some arguments*/);

extern void call_log(const char*file,const char*function,const int line,const char*args);

#define foo(...) (call_log(__FILE__, __FUNCTION__, __LINE__, "" #__VA_ARGS__), foo(__VA_ARGS__))

但是,我收到以下错误:

 error: expected a type specifier
(call_log(__FILE__, __FUNCTION__, __LINE__, "" #__VA_ARGS__),foo(__VA_ARGS__)

假设 foo 函数被一些参数调用并返回一个 int。

编译器是gcc 3.4

谢谢

编辑

删除了“。”和额外的间隔,但问题仍然存在。任何人都可以看到是什么导致了它。另请注意,我正在使用可变参数宏——由我的编译器 (c99) 支持

编辑 2只是为了得到关于我非法使用某些 c/c++ 构造的声明。以下代码有效,我正在尝试使其适应我当前的(上述功能)

#include <stdio.h> 

int funcA( int a, int b ){ return a+b; }

// instrumentation

void call_log(const char*file,const char*function,const int line,const char*args){
printf("file:%s line: %i function: %s args: %s\n",file,line,function,args);
}

#define funcA(...) \
(call_log(__FILE__, __FUNCTION__, __LINE__, "" #__VA_ARGS__), funcA(__VA_ARGS__))

// testing

void funcB()
{
funcA(7,8);
}


int main(void){
int x = funcA(1,2)+

funcA(3,4);

printf( "x: %i (==10)\n", x );

funcA(5,6);

funcB();
}

编辑3

正如 litb 所指出的,问题实际上是由宏替换引起的。我还注意到 foo 不仅是一个函数调用,而且在某些情况下还用作 ptr->foo[] 。任何想法如何在不破坏更多代码的情况下解决此类问题

最佳答案

找出错误的最佳方法是让编译器显示预处理代码。然后,您可以更轻松地发现有问题的行中的问题。

关于C++ 预期类型说明符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1492298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com