c - 原生 C 有共同的符号吗?
问题描述
在 GCC10 中,gcc 默认为fno-common
. 这意味着,所有暂定定义的符号都不常见。我认为 gcc 符合 C 规范,但在本机 C 程序中似乎没有通用符号。通用符号是否仅用于扩展语法?
解决方案
原生 C 有共同的符号吗?
阅读 C11 标准n1570。它的索引甚至没有提到常见的符号。
也许您指的是Linux 上用于目标文件和可执行文件的ELF文件格式。在那里,您可以找到常用符号的提及,这些符号往往已被弃用……阅读Linux ABI 规范等。
我的建议是将所有公共符号声明为extern
某个头文件(#include
大多数文件中的 -d ),并在单个翻译单元*.c
中定义一次(不使用) 。您可以使用简单的预处理器技巧(例如X-macros)。extern
您可能对使用 C 代码生成器(例如柠檬或SWIG )感兴趣,或开发您的脚本(使用GNU awk或Guile或Python或GPP等......)以获取简单的元编程技术(autoconf可能是鼓舞人心的)生成一些C 代码。适当地配置您的构建自动化工具(GNU make、ninja ...)。
您可能对使用静态分析器选项和最近 GCC 的预编译头文件感兴趣。还要查看Clang 静态分析器和clang tidy和Frama-C。
推荐阅读
- spring-boot - hazelcast 依赖 hazelcast-spring:4.2.2 添加 hazelcast-spring:3.11.6
- jmeter - 使用用户定义的变量验证 JDBC 请求
- python - 数据集中电影类型的编码
- html - 如何消除页脚和版权部分之间的颜色差距?
- amazon-web-services - 没有 SAM 的 AWS Lambda 容器部署
- javascript - 如何使用 NPM 从 Windows 10 机器上的 Node.js 导出正确的对象?
- python - Python CSV 通过前列的值从单元格中获取值
- sql - 当 SQL 查询中的连接条件包含 `file.id = -1` 时,它会返回所有行。为什么?
- continuous-integration - Gitlab-CI 和 WKHTML:从文本文件中读取 URL 并发布 PDF。意外错误,作业失败,退出代码 1
- python - 当我更改 SMOTE 和 ADASYN 中的 k 邻居数时,如何绘制图表以查看每个类的边界如何变化?