首页 > 解决方案 > 原生 C 有共同的符号吗?

问题描述

在 GCC10 中,gcc 默认为fno-common. 这意味着,所有暂定定义的符号都不常见。我认为 gcc 符合 C 规范,但在本机 C 程序中似乎没有通用符号。通用符号是否仅用于扩展语法?

标签: cgccsymbolsgcc10

解决方案


原生 C 有共同的符号吗?

阅读 C11 标准n1570它的索引甚至没有提到常见的符号。

仔细阅读GCC 的文档和这份报告草案

也许您指的是Linux 上用于目标文件可执行文件的ELF文件格式。在那里,您可以找到常用符号的提及,这些符号往往已被弃用……阅读Linux ABI 规范等。

我的建议是将所有公共符号声明为extern 某个头文件(#include大多数文件中的 -d ),并在单个翻译单元*.c中定义一次(不使用) 。您可以使用简单的预处理器技巧(例如X-macros)。extern

您可能对使用 C 代码生成器(例如柠檬SWIG )感兴趣,或开发您的脚本(使用GNU awkGuilePythonGPP等......)以获取简单的元编程技术(autoconf可能是鼓舞人心的)生成一些C 代码。适当地配置您的构建自动化工具(GNU makeninja ...)。

您可能对使用静态分析器选项和最近 GCC 的预编译头文件感兴趣。还要查看Clang 静态分析器clang tidyFrama-C

您肯定想传递-Wall -Wextra -g -H gcc阅读如何调试小程序Modern C


推荐阅读