c++ - 无法在预处理器指令中使用 printf
问题描述
执行以下代码时出现错误。谁能解释我在做什么错误?
#include <iostream>
using namespace std;
#define one 1
#ifdef one
printf("one id defined");
#endif
void func1();
void __attribute__((constructor)) func1();
void func1()
{
printf("before");
}
int main()
{
cout <<"main";
return 0;
}
下面是我得到的错误。
prog.cpp:5:11: error: expected constructor, destructor, or type conversion before '(' token
printf("one id defined");
^
解决方案
不清楚这段代码应该实现什么,看看扩展代码看看有什么问题(-E
对于 gcc)。这将类似于:
#include <iostream>
using namespace std;
printf("one id defined");
void func1();
void __attribute__((constructor)) func1();
void func1()
{
printf("before");
}
int main()
{
cout <<"main";
return 0;
}
但是您不能在文件范围内调用函数。可能有声明/定义,这就是编译器需要构造函数、析构函数或类型转换的原因。
PS:您包括<iostream>
但随后使用printf
. 这有点奇怪。printf
在<cstdio>
.
推荐阅读
- sql - 寻求有关预约安排流程的建议
- html - 如何缩短css中的左边框高度属性
- python - 迭代字符串时如何统一单独的数字
- javascript - 暗模式搞砸了 intersectionObserver
- javascript - 如何减轻gps追踪主页面的压力
- mysql - 我该如何解决这个问题:获取值和类型错误
- python - Mixin 类在核心模块中不显示“未解析的属性引用”
- ruby-on-rails - 为具有托管在 AWS S3 上的活动存储的文章优化缩略图创建
- .net - 开发人员异常页面中间件在 asp.net core 3.1 中不起作用
- django - 如果您在文件中看到有效模式,则问题可能是由循环导入引起的