printf重定向老是报错,咋整呢?

2019-07-21 00:38发布

环境:KEIL4.7 + C++
使用了正点原子的源代码,如下:
#if 1
#pragma import(__use_no_semihosting)             
              
struct __FILE
{
    int handle;

};

FILE __stdout;       
 
_sys_exit(int x)
{
    x = x;
}

int fputc(int ch, FILE *f)
{      
    while((USART1->SR&0X40)==0); 
    USART1->DR = (u8) ch;      
    return ch;
}
#endif

微库没有打开,包含文件#include <stdio.h>。但是会报错:
FILE __stdout;
此处报错:Srcsp.cpp(891): error:  #70: incomplete type is not allowed

_sys_exit(int x)
此处报错:Srcsp.cpp(893): error:  #260-D: explicit type is missing ("int" assumed)

int fputc(int ch, FILE *f)
此处报错:Srcsp.cpp(898): error:  #734: function "fputc(int, std::FILE *)" conflicts with using-declaration of function "std::fputc(int, std::FILE *) C"

采用微库方式,也会报错。
搞不懂啥原因,求指点,谢谢。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
23条回答
沧海
1楼-- · 2019-07-23 11:38
 精彩回答 2  元偷偷看……
LZ雾都
2楼-- · 2019-07-23 16:02
lilinkai 发表于 2015-9-18 14:32
如果是keil5&nbsp;不要勾C99,如果是keil4应该没问题

就是这个问题!!!!!终于找到了
北名若水
3楼-- · 2019-07-23 17:45
q1149306406 发表于 2018-5-12 12:41
**** 作者被禁止或删除 内容自动屏蔽 ****

二楼说得对
梅子
4楼-- · 2019-07-23 20:16
#if 1
//??????
#pragma import(__use_no_semihosting_swi)

namespace std{   
    struct __FILE
      {
        int handle;
      };

    FILE __stdout;
    FILE __stdin;
    FILE __stderr;
   
//FILE *fopen(const char * __restrict /*filename*/,
//                           const char * __restrict /*mode*/)
//    {
//        usart1<<" fopen. ";
//        return NULL;
//    }

    int fputc(int ch, std::FILE *f)
      {
                while((USART1->SR&0X40)==0);//???fputc
            USART1->DR = (u8) ch;      
                return ch;
      }

//    int fgetc(FILE *f) {
//        /* Your implementation of fgetc(). */
//        usart1<<" fgetc ";
//        return 0;
//    }
   
    int ferror(FILE *stream)
      {
        /* Your implementation of ferror(). */
        return 0;
      }

//    long int ftell(FILE *stream){
//        /* Your implementation of ftell(). */
//        usart1<<"ftell ";
//        return 0;
//    }
   
//    int fclose(FILE *f){
//        /* Your implementation of fclose(). */
//        usart1<<" fclose ";
//        return 0;
//    }
   
//    int fseek(FILE *f, long nPos, int nMode){
//        /* Your implementation of fseek(). */
//        usart1<<"fseek ";
//        return 0;
//    }
   
    int fflush(FILE *f)
      {
        /* Your implementation of fflush(). */
        return 0;
      }
  
        extern "C" void  _sys_exit(int)
          {
        /* declared in <stdlib.h> */
        abort();
        while(1);
      }
   
        extern "C" void _ttywrch(int ch)
          {
                while((USART1->SR&0X40)==0);
            USART1->DR = (u8) ch;      
        return ;
      }
}

#endif
我用C++弄,前面改成这样就可以用了
qwiszh
5楼-- · 2019-07-23 21:12
 精彩回答 2  元偷偷看……

一周热门 更多>