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

从不兼容的指针类型返回gcc C17

是指在gcc编译器的C17标准下,函数返回一个与其声明不兼容的指针类型。这种情况可能会导致编译器警告或错误。

在C语言中,函数的返回类型必须与其声明的返回类型匹配。如果函数声明返回一个指针类型,那么函数体内的返回语句必须返回与该指针类型兼容的指针。

然而,在某些情况下,我们可能需要从函数中返回一个与声明不兼容的指针类型。这可能是因为我们需要在函数内部进行一些类型转换或者进行一些特殊的操作。

在gcc C17标准下,可以使用类型转换来解决这个问题。具体做法是使用(type)将返回值强制转换为与声明不兼容的指针类型。这样可以绕过编译器的类型检查,但需要确保转换是安全和合理的。

然而,从不兼容的指针类型返回可能会导致一些潜在的问题,如内存访问错误、类型不匹配等。因此,在使用这种技术时,需要谨慎并进行充分的测试和验证。

总结起来,从不兼容的指针类型返回gcc C17是一种在gcc编译器的C17标准下,通过类型转换来返回与声明不兼容的指针类型的技术。这种做法需要谨慎使用,并进行充分的测试和验证,以确保代码的正确性和安全性。

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

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动推送、移动分析等):https://cloud.tencent.com/product/mobile
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Tencent XR):https://cloud.tencent.com/product/xr
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Golang 函数返回类型是接口时返回对象指针还是值

1.接口简介 Interface 是一组抽象方法(未具体实现方法,仅包含方法名参数返回方法)集合,如果实现了 interface 中所有方法,即该类型就实现了该接口。...注意: (1)接口中不能含有属性; (2)每种类型都能实现多个接口; (3)未初始化接口类型变量值为 nil。...接口声明格式: type InterfaceName interface { //方法列表 } 2.函数返回类型是接口时返回对象指针还是值 函数返回类型是接口时返回对象指针还是值,这个要看具体需要...期望原对象在后续操作中被修改则返回对象指针返回对象值则返回是对象副本,对对象副本修改不会影响原对象。 返回对象指针示例。...createEmployeeObj() o.Set() o.Print() e.Print() } 输出结果: company=alibaba company=alibaba 可见函数返回类型是接口时返回对象指针

7.9K30

【C++】函数 指针类型参数 与 引用类型参数 对比 ( 修改外部变量需要传入参数要求 | 参数作返回值 )

指针与引用类型参数 II . 指针作为参数和返回值 III . 引用参数简介 IV . 引用作为参数和返回值 I . 博客总结 . 指针与引用类型参数 ---- 1 ....讨论问题 : 本章只针对一点进行讨论 , 那就是对两种类型参数修改 , 是否影响到外部变量 ; 传入什么样参数才能修改外部变量 , 即 参数当返回值使用 ; 2 ....指针作为参数和返回值 ---- 指针作为参数和返回值 : 如果是指针作为参数 , 修改 N 维指针指向地址 , 那么需要传入 N + 1 维指针 , 传入指向该 N 维指针 指针参数 ( N + 1...C++ 中引用参数 : C++ 在 C 语言基础上扩展了 引用 数据类型 , 使用引用可以替代上面的指针作为参数情况 , 使参数具有返回结果能力 ; 3 ....作用及意义 : ① 具有返回值能力 : 使用引用作参数 , 可以将参数当做返回值使用 ; ② 提高参数传递效率 : 大型对象作参数时 , 使用引用类型 , 可以提高参数传递效率 ; 更多关于引用内容参考

2.1K20

C语言笔记---(1)初识C语言

C语言提供数据类型包括:整型、浮点型、数组类型指针类型、等,C99又扩充了复数浮点类型、超长整型(long long)和布尔类型(bool)等。可以用来实现各种复杂数据结构运算。...4.运算符丰富 C语言运算符包含范围非常广泛,一共有34种运算符。C语言把括号、赋值和强制类型转换等都作为运算符处理,使C程序表达式类型和运算符类型都非常丰富,表达式类型多样化。...C11 2011年,标准化组织再一次对 C 语言进行修订,增加了 Unicode 和多线程支持。这个版本称为 C11。 C17 C11 标准在2017年进行了修补,但发布是在2018年。...新版本只是解决了 C11 一些缺陷,没有引入任何新功能。这个版本称为 C17。...目前最常见C语言编译器是自由软件基金会推出GCC编译器,它可以免费使用。Linux 和 Mac 系统可以直接安装 GCC,Windows 系统可以安装 MinGW。

23.6K11

【C++】C 语言与 C++ 语言关系 ( C 语言发展 | C 语言缺陷 | C 语言 + 面向对象 + 高级语言特性 | C++ 语言增加内容 | C 语言与 C++ 语言应用场景 )

C99 , C11 , C17 等标准 , 以满足新编程需求 ; 二、C 语言缺陷 C 语言有如下缺陷 : C 语言 没有经历过 缜密 设计过程 , 都是根据需求逐渐完善 , 出现了很多缺陷和漏洞...; C 语言 在开发时 , 有很多 " 灰色地带 " , 稍不注意就会产生无法排查问题 , 如 : 内存管理 - 分配和释放内存 , 指针操作 - 野指针 , 类型转换时精度损失 , 并发死锁 等问题...指针 " 操作 " 内存 " , 造成了很多不可排查错误 , 如 : 野指针 ; 尽管 C 语言有上述缺陷 , 但是 C 语言有一个优势 , 那就是 执行效率 非常高 ; 三、C 语言 + 面向对象...加强版本编程语言 , 可以看作是更好 C 语言 , 在 C++ 语言 中 , 可以使用 C 语言语法 , 对 C 语言完全兼容 ; C++ 语言 包含 C 语言 , 在 C++ 代码中可以使用 C 语言语法..., 但是在 C 语言中不能使用 C++ 语法 ; 3、C++ 语言增加内容 C++ 语言 在 C 语言基础上 : 增加了 面向对象 支持 ; 进行了 类型加强 ; 进行了 函数加强 ; 增加了 异常处理机制

23820

__attribute__机制介绍

(有点C++基础都知道点this指针,不知道你在这里还知道吗?)...注意,默认情况下,编译器是能识别类似printf“标准”库函数。 3. noreturn 该属性通知编译器函数从不返回值。...4. const 该属性只能用于带有数值类型参数函数上,当重复调用带有数值参数函数时,由于返回值是相同。所以此时编译器可以进行优化处理,除第一次需要运算外, 其它只需要返回第一次结果。...事实上,const参数不能用在带有指针类型参数函数中,因为该属性不但影响函数参数值,同样也影响到了参数指向数据,它可能会对代码本身产生严重甚至是不可恢复严重后果。...和非GNU编译器兼容性 __attribute__设计非常巧妙,很容易作到和其它编译器保持兼容。也就是说,如果工作在其它非GNU编译器上,可以很容易忽略该属性。

2.9K11

为什么C语言依然是必学编程语言,这3点告诉你答案

二、C历史,及C标准 C语言发展脚步,其实一直都没有停止:从C89、 C90、 C99...... C17,C语言标准还在更新。...1.早期 C 1969:基于 BCPL 创建 B,以作为 Unix 系统程序语言替代 PDP-7 汇编器。增加运算符 ++ 、 -- 、复合赋值,保持为类 BCPL 类型语言。...类型( int 、 char 、数组与指针)、数组到指针转换、到机器码编译。 1972:语言更名为 C。结构体、运算符 && 及 || 、预处理器、可移植 I/O 1973:以 C 重写。...无符号整数、 long 、联合体、枚举、增强类型安全。...、 isblank 、窄与宽字符串字面量连接、枚举尾逗号、类函数宏空参数、 STDC_* pragma 、 va_copy 、 tmpnam 返回、 setvbuf 中指针、 printf

80020

malloc(0)时程序会返回什么?

翻阅C17 标准 草案 N2176,在 7.22.3 节里,有如下说法: The order and contiguity of storage allocated by successive calls...由实现定义行为这个词就提醒我们,在实际编程时如果要考虑到程序在多个运行环境下进行运行时,不能对 malloc 返回数值进行任何假设。...,当我们执行 malloc(0) 时,我们实际会拿到一个指向一小块内存指针,这个指针指向(分配给我们)内存大小是由机器决定。...因此,我们知道了,在 glibc 下,执行 malloc 会得到一个指向分配给我们大小为 24 字节内存空间指针。...但这只是在 glibc 下结果,在其他 C 标准库实现内,可能你会得到一个空指针。因为标准中提到了,对于 malloc(0) 这种故意挑事代码,实现时可以返回一个空指针作为回礼。

1.4K20

ABI 与 API 区别

对于上面这个问题,如果链接器可以将 MSVC 编译出来目标文件和 GCC 编译出来目标文件链接到一起,那么链接器首先需要支持 MSVC 编译生成目标文件格式 PE/COFF 和 GCC ELF...对于 C 语言目标代码来说,以下几个方面会决定目标文件之间是否二进制兼容: (1)内置数据类型(如 char、int、float 等)大小和在存储器中存放方式(大端、小端、对齐方式等); (2...)组合数据类型(struct、union 等)存储方式和内存分布; (3)外部符号和用户定义符号之间命名方式和解析方式。...比如函数名func在C语言目标文件中是否会被解析成外部符号_func; (4)函数调用方式,比如参数入栈顺序、返回值如何保存等; (5)函数栈分布方式,比如参数和局部变量在堆栈里位置,参数传递方法等...事实上 C++ ABI 尚未统一,目前兼容情况仍不乐观,主要有两套体系,一是微软 Visual C++ 使用标准,另一个是GNU GCC 使用标准,二者互不兼容

1.5K20

手写一个RTOS.1

去看这里 都是基于GCC芯片 各种各样,我们就看ARM就行 如果用VSCode看源码可以在这里改一个编译器目录 其实就是下面的一些重新定义 GCC数据类型 RTOS 看后面的...,无符号数 就看这么多 在FreeRTOS中,int型从不使用,只使用short型和long型。...还有其他数据类型,比如数据结构、任务句柄、队列句柄等定义变量名前缀也是x。如果一个变量是无符号型,那么会有一个前缀u,如果是一个指针变量,则会有一个前缀p。...因此,当我们定义一个无符号char型变量时会加一个uc前缀,当定义一个char型指针变量时会加一个pc前缀。...这就是几个例子,你看x就是void意思 还是那句话,都包装过 函数名包含了函数返回类型、函数所在文件名和函数功能,如果是私有的函数,则会加一个prv(private)前缀。

72620

GCC -O2 踩坑指南:严格别名(Strict Aliasing)与整数环绕(Integer Wrap-around)

类型双关经常应用在编译器、序列化、网络传输等领域。 类型双关一般做法是通过别名(alias)来实现,通过获取对象地址,将其转换为我们想要重新解释类型指针,然后访问该值。...在 N1570 第 6.5 节第 7 段: 对象存储值只能由具有以下类型之一左值表达式访问: 2.1.1 与对象有效类型兼容类型 int x = 1;int *ptr = &x;printf(..."%d\n", *ptr); // *ptr 是 int 类型左值表达式,与 int 类型兼容(相同) 2.1.2 与对象有效类型兼容类型限定版本 int x = 1;const int *ptr...= &x;printf("%d\n", *ptr); // *ptr 是 const int 类型左值表达式,与 int 类型兼容 2.1.2 与对象有效类型相对应有符号或无符号类型类型 例如...i,因此该函数永远返回 true。

40910

Android智能指针

网上已经有很多分析智能指针文章了,讲得不错是:Android系统智能指针(轻量级指针、强指针和弱指针实现原理分析。本文尽量从不分析代码角度,将Android中智能指针原理讲述清楚。...当执行到strex指令时,它会检查是否存在ptr地址标记,如果标记存在,strex指令会把add指令执行结果写入指针ptr指向地址,并且返回0,然后清除该标记。...这时再执行strex指令时,由于没有了这个标志,strex指令将不会完成对ptr指针存储操作,而且status变量中返回结果是1。这样循环不能结束,重新开始执行,直到成功为止。...__builtin_expect是gcc内建函数,有两个参数,第一个参数是一个表达式,第二个参数是一个值。表达式计算结果也是函数结果。...__builtin_expect是用来告诉gcc预测表达式更可能值是什么,这样gcc会根据预测值来优化代码。代码中表达含义是预测“status!

59240

浅谈C语言中类型声明

参考数组指针声明,我们可以这么写: int (*(*ptr)) (); 还可以进一步简化成: int (**ptr) (); 现在思考声明一个指向一个返回类型指针函数指针指针。...int *(**ptr) (); 这样一分析,群友问题中1、2含义就很明显了——都是一个返回类型为整型指针且不接收参数函数指针。 总结 C语言类型读法可以总结为外向内表内向外。...typeid 还真就有这么一个测试方法,不过是在C++中——RTTI(运行时类型信息)。好在C++基本兼容C语言类型,所以测试应该也不会有太大问题。...其中,MSVC 、 IBM 、 Oracle等编译器会返回可读性良好类型名(如:int* (*) ()),而gcc与clang却会返回被重整(mangle)名称。...所以,我们也有必要来了解GCC重整化类型名。由于GCC使用cross-vendor C++ ABI,那我们就来看看其关于类型重整编码。 內建类型 内建类型编码基本上可以用这个表格来概括。

1.7K20

使用Rust进行Linux kernel开发!

此外,bindgen 工具能够解析 C 头文件,生成相应 Rust 声明,这样 Rust 就不需要从 C 中重复定义,这也提供了一定程度跨语言类型检查。 ?...在 linux-kernel-module-rust 项目中,进入用户空间指针被 wrap 成 UserSlicePtr 类型,这确保了 copy_to_user()或 copy_from_user(...尽管 LLVM 目标是与 GCC ABI 兼容,但还是有点担心这种做法会造成微小 ABI 不兼容风险,因此碰到一些阻力。...他认为在没有出现实际问题之前,没有必要进行额外限制。Florian Weimer 澄清说,ABI 问题往往是在语言中不明显角落。例如,通过返回值来返回一个包含 bitfield 结构这种情况。...Triplett 强调,GCC 和 Rust 之间调用在用户空间中是很常见,也是正常用法,所以从 Rust 方面来说,他并不担心兼容性问题。

2.4K10

VC和GCC成员函数指针实现研究(三)

接上一篇 VC和GCC内成员函数指针实现研究(二) 虚继承 终于到最后虚继承了。...*ptr)(); return 0; } VC虚继承成员函数指针实现 因为是兼容虚继承和非虚继承,所以赋值部分汇编是一样。这里就不贴了。关键在于执行期它是怎么找到虚基类。...image.png 图二十:GCC多重虚继承非空虚基类函数指针调用 image.png 图二十一:GCC多重虚继承非空虚基类函数指针调用基类偏移调整 和多重继承做法类似:先给基类增加地址偏移...另外就是虽然GCC函数指针占用了两个指针大小,但是在这几个例子里,第二个值一直是0,所以没搞清楚这个指针是做什么用。难道是为了向前兼容就留着?希望能有知道大神给点指示。...如果非虚非静态成员函数类签名和指针类型类签名不一样,并且这两个类型转换时候地址会变化(不是第一个基类)时候。要有offset来记录this偏移。这上面的sample都过于简单了。

78410

C++静态链接

GCC把这种类似的须要在最终链接时合并段叫“ Link once”,它做法是将这种类型段命名为“gnu. linkonce. name",其中“name”是该模板函数实例修饰后名称。...对于C语言目标代码来说,以下几个方面会决定目标文件之间是否二进制兼容: 内置类型(如int、float、char等)大小和在存储器中放置方式(大小端、对齐方式); 组合类型(如 struct、 union...到了C++ 时代,语言层面对ABI影响又增加了很多额外内容,可以看到,正是这些内容使C+ +要做到二进制兼容比C来得更为不易; 继承类体系内存分布、如基类、虚基类在继承类中位置等; 指向成员函数指针内存分布...,如何通过指向成员函数指针来调用成员函数,如何传递this指针‘ 如何调用虚函数,vtable内容和分布形式,vtable指针字object位置等; template如何实例化 外部符号修饰 全局对象构造和析构...但是目前情况还是不容乐观,基本形成以微软 VISUAL C++ 和GNU阵营GCC(采用 Intel Itanium C++ ABI标准)为首两大派系,各持己见互不兼容

1.6K10

C 不再是一种编程语言

它意味着以C头文件形式获得接口类型和功能描述,并以某种方式: 匹配这些类型布局 用链接器做一些事情,将函数符号解析为指针 用适当ABI来调用这些函数(比如把args放在正确寄存器中) 那么,...我们讨论过为何intmax_t不能被改变,因为如果我们从long long(64位整数)改为_int128_t(128位整数),某个地方二进制会失控使用错误调用约定/返回约定。...如果你只在C头文件中前向声明一个类型,那么任何与之交互用户代码都不被“允许”知道该类型布局,并且必须一直在指针后面不透明地处理它。...NumberOfDescriptors 是数组长度 Reserved是一些额外内存,无论如何他们决定保留在头文件中(Minidumpapiset.h非常谨慎,从不在任何地方进行填充,因为填充字节有未指定值...当然,libc可以适当地使用符号版本技巧来使其API与新定义兼容,但改变像 intmax_t这样基本数据类型大小,是在一个平台大生态系统中寻求混乱。

67230
领券