2012-01-07 70 views
1

有没有人知道一个语言引擎(编译器或解释器,AST,语法和基本语义),但没有标准库(希望甚至不是整数或算术)。有这样的事吗?我希望能够在C++中实现标准库。这样的事情存在吗?没有标准库的语言引擎

+0

也许吧。希望能够掌握基本的语法和语义,但我可以自己放入所有的标准库。如果他们使得'#include '会失败,那就是我所追求的。 – Linuxios 2012-01-07 17:53:28

回答

4

GCC(我敢肯定有很多其他的编译器)能让你编写的代码没有标准的头和/或库,与-nostdinc(对于C也-nostdinc++ ++)和-nostdlib标志。

例如:

$ cat t.cpp 
#include <iostream> 

int main() 
{ 
    std::cout << "ouch" << std::endl; 
} 
$ g++ -nostdinc t.cpp   # Failed compilation 
t.cpp:1:20: error: no include path in which to search for iostream 
t.cpp: In function ‘int main()’: 
t.cpp:5:5: error: ‘cout’ is not a member of ‘std’ 
t.cpp:5:28: error: ‘endl’ is not a member of ‘std’ 
$ g++ -nostdinc++ t.cpp   # Failed compilation 
t.cpp:1:20: fatal error: iostream: No such file or directory 
compilation terminated. 
$ g++ -nostdlib t.cpp   # Compiles, but fails to link 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/../../../../x86_64-pc-linux-gnu/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000000400158 
/tmp/ccPPO3l6.o: In function `main': 
t.cpp:(.text+0xa): undefined reference to `std::cout' 
t.cpp:(.text+0xf): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' 
t.cpp:(.text+0x14): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)' 
t.cpp:(.text+0x1c): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))' 
/tmp/ccPPO3l6.o: In function `__static_initialization_and_destruction_0(int, int)': 
t.cpp:(.text+0x4a): undefined reference to `std::ios_base::Init::Init()' 
t.cpp:(.text+0x4f): undefined reference to `std::ios_base::Init::~Init()' 
t.cpp:(.text+0x54): undefined reference to `__dso_handle' 
t.cpp:(.text+0x61): undefined reference to `__cxa_atexit' 
collect2: ld returned 1 exit status 

这是用于像不能使用C库内核代码大楼的事情。

祝你好运,实施标准库,这是一个巨大的任务。