Tag: compiler construction

如何用g ++创build一个静态库?

有人可以告诉我如何创build一个.cpp和一个.hpp文件的静态库吗? 我是否需要创build.o和.a? 我也想知道如何编译一个静态库,并在其他.cpp代码中使用它。 我有header.cpp , header.hpp . 我想创buildheader.a 。 在test.cpptestingheader.a。 我正在使用g ++进行编译。

为什么要包括警卫?

我正在学习C. 在这里定义的包含守护程序用于防止在编译时加载相同的代码两次。 为什么我的编译器(GCC)不能检测到它加载了相同的代码两次,并有一个合理的默认行为?

GCC和MS编译器的模板实例化细节

任何人都可以在GCC和MS编译器的编译和/或链接时提供模板实例如何处理的比较或具体细节? 这个过程在静态库,共享库和可执行文件中是不同的吗? 我发现这个文档有关GCC如何处理它,但我不确定信息是否仍然指的是事物的当前状态。 我应该在编译我的库时使用他们build议的标志,例如-fno-implicit-templates ? 我所知道的(可能不一定是正确的)是: 模板将在实际使用时被实例化 模板将被实例化为显式实例化的结果 通常通过折叠重复实例来处理重复实例化,或者通过推迟实例化直到链接时间

javac和Eclipse编译器有什么区别?

Eclipse的Java编译器只是javac程序包装的同一个核心的一个包装,还是一个单独的编译器? 如果是后者,他们为什么要重新发明轮子?

为什么在没有返回值的情况下stream出非void函数的结尾不会产生编译器错误?

自从我多年前意识到,这不会默认产生一个错误,(至less在gcc中)我总是想知道为什么? 我明白,你可以发出编译器标志来产生警告,但不应该总是一个错误? 为什么没有返回值是有效的非void函数是有意义的? 评论中所要求的一个例子: #include <stdio.h> int stringSize() { } int main() { char cstring[5]; printf( "the last char is: %c\n", cstring[stringSize()-1] ); return 0; } …编译。