无法在预处理程序指令中使用printf [重复]

问题描述 投票:-1回答:1

此问题已经在这里有了答案:

执行以下代码时出现错误。任何人都可以解释我在做什么错误吗?

#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
1个回答
3
投票

尚不清楚此代码应实现什么,请查看扩展的代码以了解错误的地方(gcc为-E)。它将类似于:

#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>中。

© www.soinside.com 2019 - 2024. All rights reserved.