问题描述
- 操作系统:Deepin 20(基于Debian 10)
- CLion:2020.1.2
- GCC:gcc(Uos 8.3.0.3-3 +重建)8.3.0
- 制作:4.2.1 x86_64-pc-linux-gnu
- Cmake:3.18.1
我是刚开始学习C语言的新手。当我使用CLion编写C代码时,可以通过Ctrl + mouse click
访问它。
我正在调用标头函数中的方法。例如,如果我使用printf
,则可以访问stdio.h
文件,该文件可以在第332行extern int printf (const char * ___,RESTRICT,format,...) ;
看到。
但是,如果我想查看此方法的详细信息
我看不到。根据{{3}}
使用Ctrl+Alt+Home
进行切换。但是IDE会提示No related file
。
如何获取源代码来调用方法?我想通过查看其他人在其库中的实现逻辑来学习他们的良好经验
谢谢您的评论。如果您能帮助我,我将不胜感激。
解决方法
即使大多数GNU / Linux软件是open source,默认情况下也不会以源代码形式安装该软件。
关于C编程,请参见Modern C(和C11标准n1570)并阅读C编译器的文档(也许是GCC或Clang,或更简单的类似nwcc或tinycc),链接器(可能是binutils),build automation工具(例如GNU make或ninja或cmake )。启用所有警告和DWARF调试信息,因此如果使用GCC进行编译,至少要使用gcc -Wall -Wextra -g
;然后改进您的C代码以获取任何警告。调试完C源代码(使用GDB并可能使用valgrind)后,请添加优化标志,例如-O2
。 gcc
的参数顺序很重要!
请考虑一下,对于某些任务,使用诸如GNU bison,ANTLR,SWIG,{等的工具来生成一些C代码(也许是#include
-d头文件) {3}},RPCGEN,AWK,GUILE,GPP,GNU m4-或您自己的程序或脚本。
我想通过查看其他人在其库中的实现逻辑来学习他们的良好经验
您需要从其他地方获取源代码。
有关示例,请参见GNU autoconf或GNU libc和musl-libc(以及其他Linux kernel,GTK,PostGreSQL,{{ 3}}等...,包括此答案中提到的许多开源程序),并且还在sqlite,GUILE,github
也请阅读gitlab和sourceforge。另请参见Advanced Linux Programming
在2020年,当要求优化时,最近的syscalls(2)编译器碰巧处理对printf
的特殊调用。请参见http://linuxfromscratch.org/和GCC项目。
在某些情况下,请考虑在程序中使用softwareheritage和Frama-C接受plugins(另请参见dlopen(3)和dlsym(3))。您甚至可以在运行时使用elf(5)之类的库生成一些代码(或在运行时生成C代码,然后将其编译为插件并加载它;这种方法称为How to Write Shared Libraries,与{ {3}};有关更多见解,另请参见libgccjit。
当然,您需要在源代码中导航的工具。为此,可以考虑结合使用metaprogramming和partial evaluation或其他blog of the late J.Pitrat。对于具有数百万个源代码行的大型程序,请考虑编写自己的GNU emacs来理解它们。>
还使用GNU grep和source navigator.之类的工具来了解程序的动态行为。
期望几个月的全职工作来探索所有这一切。
您也可能对GCC plugin个会议论文感兴趣。
对于您自己的源代码,请考虑使用一些strace(1)工具,例如GDB。当然,请阅读其文档。并使用ACM,version control或git,LibreOffice(可能与数字Lout或LaTeX结合使用)编写软件的文档
在某些情况下,您可能会考虑从部分源代码生成部分文档(例如,使用MarkDown之类的inkscape技术或diagrams之类的文档生成器)。