2017-07-27 60 views
2

我是编程的noob。 我的老师编译了一个没有任何预处理指令的程序,它执行并显示输出。 这只是一个你好世界计划。 我很困惑,没有指令如何能够执行“printf”功能。程序编译并执行无头文件turbo C++

+0

为什么不呢?你需要什么预处理器?实际的编译阶段编译文件时没有任何预处理器东西 –

+0

'printf'?所以老师实际上使用了'printf'。 – AnT

回答

3

在“经典”ANSI C(C89/90)中,只要您仔细地提供适当类型的参数,就可以在不预先声明它们的情况下调用非可变函数。所以,如果一个人做得正确,可以编写一个不包含任何标准头文件的正式有效的C89/90程序。例如。

int main() 
{ 
    puts("Hello World"); 
    return 0; 
} 

在现代C这是不可能的,因为从C99开始的所有功能都被调用之前声明。现在

,主叫printf甚至没有在C89/90的预声明它(与原型)造成未定义的行为,因为printf是一个可变参数函数。所以,如果你的老师做了这样的事情

int main() 
{ 
    printf("Hello World\n"); 
    return 0; 
} 

,那么他/她仍然有很多东西需要学习有关C.这C89/90程序是无效的,即使它编译,执行和显示输出“看着罚款“给你。

但是,你仍然可以预先声明函数手动

​int printf(const char *format, ...);​ 

int main() 
{ 
    printf("Hello World\n"); 
    return 0; 
} 

,并与不使用任何预处理指令有效的C89/90的程序结束。虽然这样做并不是一个好的编程习惯。

+0

我在TurboC++上试过了你的“puts”代码,但是它显示了一个错误,说明了puts必须有一个原型。 –

+0

@AlphaMineron首先,您必须确保您将代码编译为C,而不是C++。其次,它必须是“旧”C-C89/90。 – AnT

+0

哦,我明白了............ –