程序编译和执行没有头文件turbo c ++

时间:2017-07-27 22:28:11

标签: c turbo-c++

我是编程中的菜鸟。 我的老师编写了一个没有任何预处理器指令的程序,它执行并显示输出。 这只是一个问候世界的计划。 我很困惑,如果没有指令它如何能够执行“printf”功能。

1 个答案:

答案 0 :(得分:3)

在“经典”ANSI C(C89 / 90)中,只要您注意提供正确类型的参数,就可以在不预先声明它们的情况下调用非可变函数。因此,如果一个人正确地完成所有事情,就可以编写一个正式有效的C89 / 90程序,该程序不包含任何标准头文件。 E.g。

Cliver::Dependency::NotFound:
        Could not find an executable ["phantomjs"] on your path.
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/cliver-0.3.2/lib/cliver/dependency.rb:143:in `raise_not_found!'
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/cliver-0.3.2/lib/cliver/dependency.rb:116:in `detect!'
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/cliver-0.3.2/lib/cliver.rb:24:in `detect!'
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/poltergeist-1.9.0/lib/capybara/poltergeist/client.rb:36:in `initialize'
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/poltergeist-1.9.0/lib/capybara/poltergeist/client.rb:14:in `new'
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/poltergeist-1.9.0/lib/capybara/poltergeist/client.rb:14:in `start'
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/poltergeist-1.9.0/lib/capybara/poltergeist/driver.rb:42:in `client'
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/poltergeist-1.9.0/lib/capybara/poltergeist/driver.rb:25:in `browser'
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/poltergeist-1.9.0/lib/capybara/poltergeist/driver.rb:95:in `visit'
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara/session.rb:227:in `visit'
      # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara/dsl.rb:51:in `block (2 levels) in <module:DSL>'
      # ./spec/scraypa_spec.rb:52:in `block (4 levels) in <top (required)>'

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

现在,即使在C89 / 90中,调用int main() { puts("Hello World"); return 0; } 而不预先声明它(使用原型)也会导致未定义的行为,因为printf是一个可变函数。所以,如果你的老师做了类似的事情

printf

然后他/她仍然需要了解很多关于C.这个C89 / 90程序无效,即使它编译,执行并显示“看起来很好”的输出。

但是,您仍然可以手动预先声明该功能

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

并最终获得一个不使用任何预处理指令的有效C89 / 90程序。这样做不是一个好的编程习惯。