首页 > 解决方案 > 无法在预处理器指令中使用 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");
           ^

标签: c++preprocessor

解决方案


不清楚这段代码应该实现什么,看看扩展代码看看有什么问题(-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>.


推荐阅读