是否有不需要标准库的C/C++编译器?

Kyl*_*mus 4 c c++ compiler-construction

我们公司的所有申请人必须通过一个简单的测验,使用C作为早期筛选过程的一部分.

它由C源文件组成,必须对其进行修改才能提供所需的功能.我们明确声明我们将尝试按原样编译文件,不做任何更改.

几乎所有申请人都使用"strlen",但其中一半不包含"string.h",因此在我包含它之前它不会编译.

它们只是懒惰还是那些不需要您包含标准库文件的编译器,例如"string.h"?

Wer*_*sey 13

GCC将很乐意按原样编译以下代码:

main()
{
   printf("%u\n",strlen("Hello world"));
}
Run Code Online (Sandbox Code Playgroud)

它会抱怨incompatible implicit declaration of built-in function ‘printf’strlen(),但它仍会产生可执行文件.

如果用-Werror它编译就不会编译.

  • 如果`size_t`与`int`的大小不同,仍然可能出错.可能最好投出结果. (3认同)
  • 我最后一次遇到这样的问题是在90年代中期,但它仍然适用.不能保证`size_t`与`unsigned int`相同,并且有更多的系统,其中`size_t`是64位而`unsigned int`是32(回到90年代中期,我遇到了这个问题的一半大小). (2认同)
  • @Steve - _best_结果是使用`%zu`(`size_t`的`printf()`格式)但是对z修饰符的支持可能不稳定. (2认同)