如何在C中使用没有任何库的printf()?

时间:2018-05-05 14:35:21

标签: c printf teensy implicit-declaration

我正在编写一个Teensy微控制器作为C课程的一部分,并试图计算出我的一个整数变量的值。我有一个名为 Contrast 的整数变量,它被初始化为在.c文件开头定义为十六进制数的常量值:

#define LCD_DEFAULT_CONTRAST    0x3F 
int Contrast = LCD_DEFAULT_CONTRAST;

我正在尝试调查对比度值的存储和显示方式,如果它显示为 63 0x3F ,以及它们是否存在是可以互换的。我试着用:

printf("%d", Contrast);

对比度值打印到终端,我收到错误隐式声明函数'printf' 。我认为printf()是内置C库的一部分,所以我很困惑为什么这不起作用。

有人可以告诉我如何将此变量的值打印到屏幕上吗?

2 个答案:

答案 0 :(得分:4)

隐式声明错误只表示您的编译器没有printf的声明。除非您也遇到链接器错误,否则链接器(链接通常遵循编译,除非您通过-c禁用它)可能正在打开标准库,在这种情况下,您可以通过包括简单地解决警告stdio.h或更少,最好是声明int printf(char const*, ...);

如果你没有标准的lib,你需要手动将整数转换为字符串:

int n = 42;
char buf[20];
char *end = buf+(sizeof(buf)-1), *p = end;
*p--=0;
if(n==0) *p=='0';
else{
    while(n){
        printf("%d\n", n%10);
        *p--=n%10+'0'; 
        n/=10;
    }
    p++;
}

然后将其传递给系统的原始IO例程,您需要设置系统输入程序集。

如果你没有系统,那就更具技术性了,你可能不会问这个问题。

答案 1 :(得分:1)

printf()在标准库标题<stdio.h>中声明。

您必须#include <stdio.h>才能使用printf()。这是一个库调用,就像C中的所有其他库调用一样。