首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么"重新定义typedef"错误与GCC 4.3而不是GCC 4.6?

"重新定义typedef"错误与GCC 4.3而不是GCC 4.6的原因是因为在GCC 4.3版本中引入了一项新的特性,即允许在结构体或联合体内重新定义typedef。这意味着在同一作用域内,可以多次使用typedef关键字来定义相同的类型名称。

然而,在GCC 4.6版本中,该特性被修复,不再允许在结构体或联合体内重新定义typedef。这是因为重新定义typedef可能导致代码的可读性和维护性问题,容易引起混淆和错误。

具体来说,当在结构体或联合体内重新定义typedef时,GCC 4.3版本会忽略后续的定义,而GCC 4.6版本会给出编译错误。这是为了避免潜在的错误和代码混淆。

对于这个错误,建议使用GCC 4.6或更高版本的编译器来避免重新定义typedef的问题。如果需要在结构体或联合体内定义不同的类型名称,可以考虑使用不同的名称来避免冲突。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【嵌入式开发】gcc 学习笔记(一) - 编译C程序 及 编译过程

\n"); return 0; } 在 gcc 命令行中进行宏定义 : 使用 gcc -DNUM=5 main.c 命令, 在程序中就可以使用 NUM 宏定义了, "-DNUM" 相当于在程序中定义了.../a.out 段错误 (核心已转储) 2....对象文件, 这里 main.o 应该在 kill.o 之前; -- 错误排查 : 如果在编译程序的时候, 列出了所有的文件, 但是还出现了 未定义 错误, 就需要注意 文件排列的问题; 修改文件流程...: 当修改了一个文件之后, 只需要 重新编译这个文件即可, 之后将这个新编译的对象文件 原来的对象文件进行链接, 即可生成新的可执行文件; -- 重新编译 : 当修改了一个文件之后, 只需要将这个文件重新编译成...对象文件即可; -- 重新链接 : 将新编译的对象文件, 之前已经编译好的 其它源文件的对象文件进行链接即可;

65440

哪个版本的gcc才支持c11

【解决过程】 1.google搜: gcc c11 就可以看到: 2 Language Standards Supported by GCC 明白: C89=C90:gcc选项是:-ansi...像C++这样的编程语言,通过一种演化的的过程来发展其定义。这个过程不可避免地将引发现有代码的兼容问题,在C++的发展过程中偶尔会发生。...此时使用gcc -v查看默认版本,为4.6版本: ?...既然GCC-4.8使用了最新的C++11标准,但是我们为什么还是提示错误呢?解决方法如下: 在编译的时候添加-std=c++11选项即可正常编译C++11标准的代码!...提示错误:‘c’变量没有类型,范围for循环不允许在C++98标准中使用 这是因为GCC/G++默认的-std(即C++语言标准)不是C++11,在这里默认的是C++98,所以需要显式地开启,即添加-

7.7K20
  • Redis之入门介绍

    根据自己实际情况选择,将64bit的内容cp到自定义盘符安装目录取名redis。...错误原因: 原来Linux系统没有装gccRedis是C实现的,所以需要gcc来进行编译。 报错一 安装gcc gcc是linux下的一个编译程序,是C程序的编译工具。...4.2、默认16个数据库,类似数组下表从零开始,初始默认使用零号库 设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id databases 16 4.3、...Select命令切换数据库 4.4、Dbsize查看当前数据库的key的数量 4.5、Flushdb:清空当前库 4.6、Flushall;通杀全部库 4.7、统一密码管理,16个库都是同样密码,要么都...OK要么一个也连接不上 4.8、Redis索引都是从零开始 4.9、为什么默认端口是6379

    48410

    ​在tinycolinux32上装tinycolinux64 kernel和toolchain

    这里没有任何涉及到先有鸡还是先有蛋的问题(当然第一个GCC肯定不是GCC产生的,这其实是个演化问题),但是一旦涉及到cross compile(cross compile正是通用流程,bootstrap...GCC产生的程序需要运行在配有当初GCC一起产生的binutils中的LD的host平台中运行等,如此种种,etc...........我们选用2.x repos的make.tcz(3.81版,为什么不使用3.x的make 382接下来会涉及到)和选用3.x repos的gcc443 32位(为什么不用4.x的gcc471:因为4.x后采用...eglibc,在编译很多程序时会遇到重复定义错误,这个时候就应该想到是版本问题),走从GCC443 32位编译出GCC443 64的方案,要保证系统绝对干净,否则可能会遇到各种坑(比如cant computer...-4.4.3.tar.bz2(从GCC-4.3起,安装GCC将依赖于GMP-4.1以上版本和MPFR-2.3.2以上版本。

    83020

    基础环境搭建,这一篇就够了!

    &Mac也会捎带提及,并特别注明; 文章重点介绍搭建过程,不会过多涉及具体使用; 另外,有很多工具使用的是脚本安装,可以通过source命令来执行脚本,如"source jdk_install.sh"不是...关于gcc和make之间的区别联系: gcc是编译器、make不是,make是依赖于Makefile来编译多个源文件的工具,在Makefile里同样是用gcc(或者别的编译器)来编译程序; gcc是编译一个文件...,make是编译多个源文件的工程文件的工具。...make是一个命令工具,是一个解释makefile中指令的命令工具; gcc是编译工具,make是定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,也就是说make是调用gcc的; 一、...使用 Docker-compose,可以用一个 YAML 文件定义一组要启动的容器,以及容器运行时的属性。

    2.5K40

    C 不再是一种编程语言

    但在失望的原因上,Aria朋友各自持不同意见。那具体产生了哪些分歧呢?为什么会提出C不再是一种编程语言的观点呢?...不幸的是,它并不是。这不是说数十亿种实现方式和失败的层次结构,导致它的定义方式非常糟糕的事实,而是C被提升到一个具有威望和权力的角色,它的统治是绝对和永恒的。...所以…为什么不直接用C来相互对话呢? 现在C就变成了一种编程通用语言,不仅是一种编程语言,它还是一种协议了。 C对话包括哪些内容?...当然有一些奇怪的jank C编译器,但Clang和GCC不是: > abi-checker --tests ui128 --pairs clang_calls_gcc gcc_calls_clang...事实上,微软实际上有理由使用这种版本方案,并定义了两个版本的数组元素: typedef struct _MINIDUMP_HANDLE_DESCRIPTOR { ULONG64 Handle;

    68730

    C 不再是一种编程语言

    但在失望的原因上,Aria朋友各自持不同意见。那具体产生了哪些分歧呢?为什么会提出C不再是一种编程语言的观点呢?...不幸的是,它并不是。这不是说数十亿种实现方式和失败的层次结构,导致它的定义方式非常糟糕的事实,而是C被提升到一个具有威望和权力的角色,它的统治是绝对和永恒的。...所以…为什么不直接用C来相互对话呢? 现在C就变成了一种编程通用语言,不仅是一种编程语言,它还是一种协议了。 C对话包括哪些内容?...当然有一些奇怪的jank C编译器,但Clang和GCC不是: > abi-checker --tests ui128 --pairs clang_calls_gcc gcc_calls_clang...事实上,微软实际上有理由使用这种版本方案,并定义了两个版本的数组元素: typedef struct _MINIDUMP_HANDLE_DESCRIPTOR { ULONG64 Handle;

    75810

    “C不再是一种编程语言”

    这意味着它必须那个操作系统交互——很多操作系统都是用 C 编写的。因此,该语言必须 C 代码交互,这意味着它必须调用 C API。这是通过外部功能接口(FFI)完成的。...该类型是一个 gcc 扩展,但 AMD64 SysV ABI 在一个不错的 PDF 文件里做了明确定义和说明。...我们谈下为什么不能修改 intmax_t,因为如果我们从 long long(64 位整数)改为 __int128_t(128 位整数),某些二进制文件就会无所适从,使用错误的调用约定 / 返回约定。...事实上,微软使用这种版本化方案是有原因的,他们定义了两个版本的数组元素: typedef struct _MINIDUMP_HANDLE_DESCRIPTOR { ULONG64 Handle;...不用说,这个相比之下不是很容易理解的类型已经渗透到许多二进制文件中去了,最终的结论是,Debian 的所有东西都需要重新编译。

    64821

    “C不再是一种编程语言”

    这意味着它必须那个操作系统交互——很多操作系统都是用 C 编写的。因此,该语言必须 C 代码交互,这意味着它必须调用 C API。这是通过外部功能接口(FFI)完成的。...该类型是一个 gcc 扩展,但 AMD64 SysV ABI 在一个不错的 PDF 文件里做了明确定义和说明。...我们谈下为什么不能修改 intmax_t,因为如果我们从 long long(64 位整数)改为 __int128_t(128 位整数),某些二进制文件就会无所适从,使用错误的调用约定 / 返回约定。...事实上,微软使用这种版本化方案是有原因的,他们定义了两个版本的数组元素: typedef struct _MINIDUMP_HANDLE_DESCRIPTOR { ULONG64 Handle;...不用说,这个相比之下不是很容易理解的类型已经渗透到许多二进制文件中去了,最终的结论是,Debian 的所有东西都需要重新编译。

    57420

    面试大全 | C语言高级部分总结

    4.3、int *p; 是定义的一指针变量 p,int ( *p)[4];也是一个指针变量p;也可以这样想:凡是遇到(*p)什么的判断他是指针后,就可以说他是指针变量,包括函数指针。...’typedef enum workday{MON, // MON = 1;TUE,WEN,THU,FRI,}DAY;typedef enum weekend{SAT,SUN,}DAY;*// /错误2...workday;typedef enum weekend{MON,SAT,SUN,}weekend;} 六、C语言宏定义预处理、函数和函数库(看博客strcyp原函数) 6.1、源码.c->(预处理... 之所以函数能被调用,根本实质是在编译时,检查到了该函数的声明,不是因为函数定义了(当然也要定义才行,只是不是本质)。...(4) volatile是程序员意识到需要volatile然后在定义变量时加上volatile,如果你遇到了应该加volatile的情况没有加程序可能会被错误的优化。

    1.9K10

    Linux gcc命令的具体使用

    GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。 02. 命令格式 用法:gcc [选项] 文件… 03....常用选项 -pass-exit-codes 在某一阶段退出时返回最高的错误码 --help 显示此帮助说明 --target-help 显示目标机器特定的命令行选项...将 作为头文件和库文件的根目录 -B 将 添加到编译器的搜索路径中 -v 显示编译器调用的程序 -### ...4.3 仅作预处理,不进行编译、汇编和链接 [deng@localhost bak]$ gcc -E test.c -o test.i [deng@localhost bak]$ 将test.c预处理输出...8th 9th test test.c test.i test.o test.s [deng@localhost bak]$ 4.6 将目标代码生成可执行文件 [deng@localhost bak

    2.6K43

    C语言三剑客之《C专家编程》一书精华提炼

    这也是为什么C++语言令人失望的原因:它对C语言中存在的一些最基本问题没有什么改进,它对C语言最重要的扩展(类)却是建立在脆弱的C类型模型上。...首先,可以用其他类型说明符对宏类型名进行扩展,但对typedef定义的类型名称不能这样做。typedef int banana; unsigned banana i; /*错误!...----由于typedef由编译器解释的,宏是由预处理器解释的 typedef void (*ptr_to_func)(int);//这样来定义函数指针的别名。...static变量保存在数据段,不是堆栈中。 auto关键字几乎没什么用处,因为它只能用于函数内部,但是在函数内部声明的数据缺省就是这种分配。...“数组名被改写成一个指针参数”规则并不是递归定义的。数组的数组会被改写成“数组的指针”,不是“指针的指针”。

    2.4K50

    基于 hook 和 gmock 开展单元测试

    四、遇到的问题解决方案 (1)类的private、protected函数,外部测试类无法调用 开发在设计类时,对于不想让外部类访问的属性以及方法都可以定义为私有的,这并没有什么设计上的问题,但对于测试而言...2)为什么无法mock非虚函数?...Google官方提供的一个例子,如图7: 图7 依赖注入 方案二 重新定义一个mock类B,该类并不继承被测类A,但是在mock类B中,需要实现和A中同样的函数接口,除了待mock的接口。...1) binutils版本不对 所有的case以及源码编译没有问题,但是在运行case的时候会出现如下图8所示的core: 图8binutils版本错误引起的core 2)gcc版本不对 gcc5.1...1)虚拟机centOS4.3+gcc3.4.5 该虚拟机上安装的btest也只有相应的lib和so文件,没有btest的源码,直接运行自带的samples,btest运行完好,没有相应的core。

    5.4K30

    C编译: 动态连接库 (.so文件)

    在“纸上谈兵: 算法数据结构”中,我在每一篇都会有一个C程序,用于实现算法和数据结构 (比如栈和相关的操作)。...在同一个程序中,还有用于测试的main()函数,结构体定义,函数原型,typedef等等。 这样的做法非常不“环保”。算法的实际运用和算法的实现混在一起。...共享库Windows下的DLL类似,是在程序运行时动态连接。多个进程可以连接同一个共享库。 ? 共享库 本文使用Ubuntu测试,使用gcc作为编译器。...首先,编译stack.c: $gcc -c -fPIC -o mystack.o mystack.c -c表示只编译(compile),不连接。-o选项用于说明输出(output)文件名。...这样做的坏处是,如果库文件移动位置,我们需要重新编译test。使用如下命令编译test.c: $gcc -g -o test test.c -lmystack -L. -Wl,-rpath=.

    2.8K70

    linux的gcc使用方法_linux怎么用gcc编译

    常用选项 -pass-exit-codes 在某一阶段退出时返回最高的错误码 –help 显示此帮助说明 –target-help 显示目标机器特定的命令行选项 –help={common|optimizers...的内容覆盖内建的 specs 文件 -std= 指定输入源文件遵循的标准 –sysroot= 将 作为头文件和库文件的根目录 -B 将 添加到编译器的搜索路径中 -v 显示编译器调用的程序 -### ...4.3 仅作预处理,不进行编译、汇编和链接 [deng@localhost bak]$ gcc -E test.c -o test.i [deng@localhost bak]$ 将test.c预处理输出...8th 9th test test.c test.i test.o test.s [deng@localhost bak]$ 4.6 将目标代码生成可执行文件 [deng@localhost bak]...bak]$ gcc test.o testfun.o -o test [deng@localhost bak]$ 到此这篇关于Linux gcc命令的具体使用的文章就介绍到这了,更多相关Linux gcc

    6.7K20

    6_MakefileGCC

    /a.out $ 100 ask ​ (2)输出所有警告选项(-Wall) ​ 显示所有的警告信息,不是只显示默认类型的警告。建议使用。.../output 20 40 6.4 Makefile的引入及规则 6.4.1 为什么需要Makefile? ​ 在上一章节对GCC编译器描述,以及如何进行C源程序编译。...并且由Makefile负责管理整个编译流程,Makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 Makefile就像一个...为什么clean下的命令没有被执行?这是因为Makefile中定义的只执行命令的目标工作目录下的实际文件出现名字冲突。...Makefile中clean目标没有任何依赖文件,所以目标被认为是最新的不去执行规则所定义的命令。所以rm命令不会被执行。

    3.6K10

    Linux下如何编译CC++代码?从.c到.exe经历了什么?

    在学习C语言阶段,存在一个疑问:为什么“宏”不会做语法检查? 答案: 宏是在预处理阶段被直接替换的,语法检查是在编译(下面讲解的)阶段进行的。...注意: 因此,我们需要在编写宏时特别小心,遵循一定的规范和约定,以尽量避免出现语法错误和其他问题。...得到了下面的效果: 其实,我们也可以使用-D选项,gcc -E test.c -o test.i2 -DNUM=2可以在使用指令的同时 定义宏。...4.2 “编译”阶段 前面我已经了解了预处理阶段的工作,那么下一步就是 “编译”了 -S选项:让gcc开始执行程序翻译,到编译结束后就停止。 为什么会报错呢?...下图示例: 4.3 “汇编”阶段 “编译”结束了,我们得到了汇编指令,汇编指令是计算机中的基本指令,它用于控制计算机的运行和执行各种操作。这已经算是很接近底层的语言了。

    24310
    领券