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

对于提供给它的字面参数,有没有一个等同于GCC的__PRETTY_FUNCTION__?

在云计算领域,GCC(GNU Compiler Collection)是一个广泛使用的编译器套件,它支持多种编程语言。PRETTY_FUNCTION是GCC提供的一个预定义宏,用于获取当前函数的可读性较好的字符串表示。

在云计算中,没有一个等同于GCC的PRETTY_FUNCTION的预定义宏。云计算平台一般提供的是一系列的服务和工具,用于构建、部署和管理应用程序,而不是直接提供编译器和编译器相关的宏。

然而,在云计算中,开发者可以使用不同的编程语言和开发框架来构建应用程序。对于不同的编程语言和框架,可能会有类似的机制或工具来获取当前函数的信息,例如函数名、类名等。具体的实现方式和方法取决于所使用的编程语言和框架。

对于C++语言,除了GCC的PRETTY_FUNCTION,还有其他方式来获取函数信息,例如使用funcFUNCTION宏。这些宏可以在编译时获取函数名,并在代码中使用。在云计算中,使用C++开发的应用程序可以在云平台上进行部署和运行。

总结起来,云计算平台本身不提供类似GCC的PRETTY_FUNCTION的预定义宏,但开发者可以根据所使用的编程语言和框架,使用相应的机制或工具来获取函数信息。

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

相关·内容

查看自动类型推导结果方法

对于C++内置类型,IDE基本上都能推导出来,但是遇到比较复杂类型或者复杂代码上下文中,IDE可能就有点不够智能了。...,这时候可以借助C++RTTI特性,C++标准库提供了typeid函数和type_info类,对变量或者类型调用typeid会返回一个type_info对象,type_info类里有一个成员函数name...这时可以采用另外一种手段来输出变量类型,跟上小节中例子一样借助模板技术,实现一个模板函数,在模板函数中利用编译器提供宏,把这个函数原型打印出来,函数原型中就包含了函数参数个数及其类型,这个宏由于不是...C++标准中定义,是由各编译器扩展,因此名称不一样,在GCC/Clang中是__PRETTY_FUNCTION__,在微软MSVC中是__FUNCSIG__,如下代码:#include void dumpType() { // GCC/Clang使用这行 std::cout << __PRETTY_FUNCTION__ << std::endl; // MSVC

10710

适合具备 C 语言基础 C++ 入门教程(十一)

1、第一步首先是列出可能被调用地候选函数,就包括普通函数和参数推导成功地模板函数 针对于这个例子来说,列出候选函数如下所示: 第一个模板函数:mymax(const int &, const int...:int -> int 第三个普通函数:int -> int 所以,第二个模板函数和第三个普通函数并列第一,第一个模板函数排第二 3、选择更加匹配候选函数 如果匹配度相同 优先选择普通函数 对于多个模板函数...(int*, int*),通过这里分析,我们可以看出对于第二个模板函数和第四个模板函数来讲,第四个模板函数更加具体,也就是更加特化,所以上述是调用第四个模板函数。...第一个模板函数:int* -> const int *& 第二个模板函数:int* -> const int* 3、根据参数,进行匹配: 由2、结果可知,两个都是匹配 既然两个都是匹配,那要如何进行选取呢...,虽然在介绍时候,都是在 .cpp中实现,但是在实际项目当中,其实基本都是写在.h文件中,因为对于模板来说,它只是一些编译指令,一般都是将其放在头文件中供其他代码引用。

21920
  • 适合具备 C 语言基础 C++ 教程(十一)

    1、第一步首先是列出可能被调用候选函数,就包括普通函数和参数推导成功模板函数 针对于这个例子来说,列出候选函数如下所示: 第一个模板函数:mymax(const int &, const int...:int ->int 第三个普通函数:int ->int 所以,第二个模板函数和第三个普通函数并列第一,第一个模板函数排第二 3、选择更加匹配候选函数 如果匹配度相同 优先选择普通函数 对于多个模板函数...(int *,int *); 2、根据参数,进行排序: 第一个:int* -> const int* 第二个:int* -> int* 第四个:int* -> int* 3、根据参数,进行排序: 最匹配是...:第二个和第四个 4、它们都是模板函数,选出“更特化”,更特化意思也就是说参数匹配更加特殊,更加具体,更加细化 我们这个时候,回过头来看第二个模板函数,mymax(T& a, T& b),对于这个模板函数来说...(T*, T*),参数只能是指针,也就是说当T = int时候,也就是 mymax(int*, int*),通过这里分析,我们可以看出对于第二个模板函数和第四个模板函数来讲,第四个模板函数更加具体,

    26320

    适合具备 C 语言基础 C++ 入门教程(十)

    , db);实际上是执行了三个不同函数,这也正是函数模板执行一个机制,函数模板其特点主要是以下两点: 函数模板只是编译指令,一般写在头文件中; 编译程序时候,编译器根据函数参数来“推导”模板参数...;然后生成具体模板函数 模板函数参数推导过程 模板函数参数推导过程是一个重要内容,它主要可以分为如下几个方面: 有限类型转换 函数模板只支持两种隐式转换 const 转换:函数参数为非 const...引用/指针,它可以隐式地转换为const引用/指针 数组或者函数指针转换: 数组可以隐式转换为”指向第一个元素指针“ 参数为”函数名字“,它隐式地转化为函数指针 其他隐式转换都不支持 苛刻类型匹配...也就是说当函数模板中形参和返回值带有const时候,那么对于实参是可以不含const修饰,也就是说可变参数可以传入到形参不可变函数里,但是反过来是不行,除非两个传进去变量都是const。...,第6行代码是不能编译通过,但是第七行代码可以编译通过,因为它使用模板参数是指针,而对于数组来说,可以隐式转换为指针,数组名可以隐式转换为指向第一个元素指针。

    1.4K10

    适合具备 C 语言基础 C++ 教程(十)

    );实际上是执行了三个不同函数,这也正是函数模板执行一个机制,函数模板其特点主要是以下两点: 函数模板只是编译指令,一般写在头文件中; 编译程序时候,编译器根据函数参数来“推导”模板参数;然后生成具体模板函数...模板函数参数推导过程 模板函数参数推导过程是一个重要内容,它主要可以分为如下几个方面: 有限类型转换 函数模板只支持两种隐式转换 const 转换:函数参数为非 const 引用/指针,它可以隐式地转换为...const引用/指针 数组或者函数指针转换: 数组可以隐式转换为”指向第一个元素指针“ 参数为”函数名字“,它隐式地转化为函数指针 其他隐式转换都不支持 苛刻类型匹配 参数类型必须完全匹配;如果不能直接匹配...也就是说当函数模板中形参和返回值带有const时候,那么对于实参是可以不含const修饰,也就是说可变参数可以传入到形参不可变函数里,但是反过来是不行,除非两个传进去变量都是const。...,第6行代码是不能编译通过,但是第七行代码可以编译通过,因为它使用模板参数是指针,而对于数组来说,可以隐式转换为指针,数组名可以隐式转换为指向第一个元素指针。

    71120

    ECMAScript 2021 (ES12)新特性总结

    先纵览下 ES2021 新功能,看看现在这些特性在你工作中有没有用到吧: String.prototype.replaceAll :有了这个 API,替换字符不用写正则了 Promise.any()...下划线 (_) 分隔符:使用 _ 分隔数字字面量以方便阅读 Intl.ListFormat :用来处理和多语言相关对象格式化操作 Intl.DateTimeFormat API 中 dateStyle...,它是去年发布标准中逻辑操作符。大家可能遇到过,如果一个变量是空,需要给它赋值为一个默认值情况。...222 接下来,再来看下新标准中逻辑运算符怎么用: // 等同于 a = a || b a ||= b; // 等同于 c = c && d c &&= d; // 等同于 e = e ??...ES2021 中给这个函数添加了两个新参数:dateStyle 和 timeStyle,dateStyle 和 timeStyle 选项可用于请求给定长度,特定于语言环境日期和时间。

    1.3K10

    C++ rtti vs 宏 - 如何优雅获取类型Tname或ID

    RTTI实现 如何获取一个类型Tname或者唯一ID, 对于这个问题, 最常规方式应该是借助C++rtti了, 比如如ponder中所使用方式: namespace ponder { namespace...compiler time优化. std::type_index实现一言难尽, 虽然你可以通过hash获取一个size_t类型ID, 但对于这个值稳定性和有效性都依赖于库底层实现, 当一些特定场合需要跨...FUNCSIG系统宏实现 那么有没有一种实现是不依赖rtti, 又能很好适配constexpr呢? 答案是肯定....了, 以上实现在VS2019和GCC8.3上测试过, clang的话需要处理一下, 宏跟Linux下一样都是 PRETTY_FUNCTION, 但前缀会稍有区别, 对应name_pretty()实现需要做下调整...这种compiler time优化对于支持C++17特性编译器来说, 还是值得去做, 一些高频操作, 参与Deduce类型又比较可预估时候, 我们肯定会倾向于用更多compiler time

    2.2K10

    【Modern C++】深入理解移动语义

    fun()其参数一个BigObj对象,当调用fun()函数时候,会通过调用BigObj拷贝构造函数,将obj变量传递给fun()参数。...如果你声明了其中一个,编译器就不再生成另一个。如果你给类声明了,比如,一个移动构造函数,就表明对于移动操作应怎样实现,与编译器应生成默认逐成员移动有些区别。...那么,对于一个左值,又如何使用移动语义呢?自C++11起,标准库提供一个函数move()用于将左值转换成右值。...标准库中很多容器都支持移动语义,以std::vector为例,**vector::push_back()**定义了两个重载版本,一个像以前一样将const T&用于左值参数,另一个将T&&类型参数用于右值参数...; // 此处调用push_back(T&) return 0; } 对于左值对象,如果我们想要避免拷贝操作,则可以使用标准库提供move()函数来实现(前提是类定义中实现了移动语义),代码如下

    83110

    【专业技术第十二讲】void妙用

    解决方案: void字面意思是空类型,void *意思是空类型指针,void 不是一个真正类型,我们在声明变量时候从来不会像下面这样声明: void a; 如果我们写了一行这样代码,某些编译器会直接报错...void真正用途在下面两个方面: 对函数返回值限定 对函数参数限定 比如,函数没有返回值,那么函数可能会声明成这样:void fun(int a); 如果函数有返回值,但是函数没有参数,那么函数可能会声明成这样...用过memset或者memcpy细心的人会发现,在gcc中编译类似下面的代码都不会有警告: int a; int *p = &a; memset(p, 0, 4); 或者 char c[4]; char...我们知道不同类型间复制是要进行强制转换,那么这里为什么不用强制类型转换呢。我们看memset原型会发现,memset一个参数就是void *。 2. void *类型可以接受任意类型指针。...例如: void *p1; char *p2 = "hellp"; p1 = p2; 这是没有问题,任何类型指针都可以直接赋值给它,无需进行强制类型转换。

    633100

    C++ 中左值和右值

    让我们先用+操作符作为一个例子,根据C++规范(specification),它使用两个右值作为参数并返回一个右值(译者按:可以将操作符理解为一个函数)。...六、常量左值引用 先看看GCC对于之前两个代码片段给出错误提示: error: invalid initialization of non-const reference of type ‘int&...’ from an rvalue of type ‘int’ GCC认为引用不是const,即一个常量。...编译器会为你创建一个隐藏变量(即一个左值)来存储初始字面常量,然后将隐藏变量绑定到你引用上去。...假设现有类型为Intvec对象v,用一个新对象给它赋值: v = Intvec(33); 这句代码合法,它构造一个临时对象,为右值,传入到Intvec赋值运算符重载函数中。

    1.8K20

    Kotlin中函数

    / 用中缀表示法调用扩展函数 1 shl 2 // 等同于这样 1.shl(2) 可变数量参数和星操作符 可变参数vararg 使用关键字vararg来修饰可变参数。...其实foreach是使用内联修饰!!! 请注意,一些内联函数可能调用传给它不是直接来自函数体、而是来自另一个执行上下文 lambda 表达式参数,例如来自局部对象或嵌套函数。...其第二个参数一个表达式,它本身是一个函数,即函数字面值。...写成函数的话,它相当于 fun compare(a: String, b: String): Boolean = a.length < b.length 函数类型 对于接受另一个函数作为参数函数,我们必须为该参数指定函数类型...可以实现dsl风格代码全靠它 Kotlin 提供了使用指定 接收者对象 调用函数字面功能。 可以调用该接收者对象上方法而无需任何额外限定符,可以任意调用接受者方法和属性。

    2.3K40

    什么是 TypeScript 4.1 中模板字面类型?

    `; 正如 Flavio Copes 所言,模板字面提供了之前用引号写字符串所不具备特性: 定义多行字符串非常方便 可以轻松地进行变量和表达式插值 可以用模板标签创建 DSL(Domain Specific...= 'md screen' | 'xs screen' | 'mobile screen' | 'desktop screen'; 当我们定义了一个具体字面量类型时,TypeScript 会通过拼接内容方式产生新字符串字面量类型...string | number 类型: TypeScript 4.1 提供一个标志 --noUncheckedIndexedAccess,使得每次属性访问(如 opts.path)或索引访问(如...要解决这个问题,必须在 Promise 中给 resolve 提供至少一个值,否则,在确实需要不带参数情况下调用 resolve() 情况下,必须使用显式 void 泛型类型参数声明 Promise...: string; } 不匹配参数将不再关联 过去,彼此不对应参数在 TypeScript 中通过将它们与 any 类型关联而彼此关联。

    3.9K10

    你可能不知道Go语言小细节

    近年来,Go语言迅速占领了开发领域重要地位,成为众多公司和开发者首选语言。 其简捷、高效、并发性强特点使得它在处理大型系统和复杂工程问题时表现出色,为开发者提供了良好体验。...a[2:] // 等同于 a[2:len(a)] a[:3] // 等同于 a[0:3] a[:] // 等同于 a[0:len(a)] 注意:对于数组或字符串,如果0 ≤ low ≤ high...对切片再执行切片表达式时(切片再切片),high上限是切片容量cap(a),而不是长度。 常量索引必须是非负,并且可以用int类型值表示。 对于数组或常量字符串,常量索引必须在有效范围内。...在完整切片表达式中只有第一个索引值(low)可以省略,该值默认为0。...只要测试时添加了除上述可缓存参数任何参数就不会缓存结果,显式禁用测试缓存惯用方法是在命令行使用 -count=1 参数。 ❯ go test .

    11710

    (五)如何编写高性能日志

    va_list型变量,这个变量是指向参数指针....va_start(va, pszFmt); //用va_start宏初始化变量,这个宏第二个参数是第一个可变参数一个参数,是一个固定参数 _vsnprintf(tmp...因为上述日志实现虽然通用,但其局限性也只能用于客户端这样对性能和效率要求不高程序(这里性能和效率是相对于高并发高性能服务器程序来说,也就是说上述日志实现可用于大多数客户端程序,但不能用于高性能高并发服务器程序...不知道读者有没有注意上,上述日志类实现,是在调用者线程中直接进行IO操作,相比较于高速CPU,IO磁盘操作是很慢,直接在某些工作线程(包括UI线程)写文件,程序执行速度太慢,尤其是当日志数据比较多时候...我目前做法是参考陈硕muduo库做法,使用一个队列,需要写日志时,将日志加入队列中,另外一个专门日志线程来写日志,我给出下我具体实现代码,如果需要查看muduo库做法,请参考陈硕书《Linux

    1.4K80

    程序员C语言快速上手——基础篇(二)

    以上就是最简单gcc编译命令,它每次都会默认生成一个a.exe程序,如果我们想指定生成程序名字,只需要加上一个参数-o指定即可,o表示out,用于指定生成程序名,如下 1 gcc hello.c...有时候我们写程序有语法错误,我们希望编译时候编译器能给出详细提示信息,这时候就可以加上另一个参数-Wall,让编译器在编译器时输出更多更详细信息,建议每次编译都加上这个参数,这样有什么错误也好查...1 gcc hello.c -Wall -o hello 以上就是我们本篇学习编译命令,总结一下就是两个参数 -o 指定生成文件名 -Wall 让编译器工作时输出更多详细信息 到这里肯定有人要说了...,其字面量应带后缀f 17 这不是必须,但应具备这样编码规范 18 */ 19 price = 15.6f; 20 } 注意,声明变量后没有初始化就使用,会造成一些不可预知结果...6 int main(void){ 7 printf("%f",PI); 8 } 注意,以上实际上是定义了一个宏,它并不是我们所说那种真正意义上常量,但它效果等同于常量,而且在某种时候这种方式比使用

    1K30

    Linux GNU C 和 ANSI C 区别

    指定数组索引方法是在初始化值前添加“[INDEX]=”,当然也可以用“[FIRST...LAST]=”形式指定一个范围。...,__FUNCTION__保存函数在源码中名字,__PRETTY_FUNCTION__保存带语言特色名字。...例如,对 于一个32位整型变量,若以4字节方式存放(即低两位地址为00),则CPU在一个总线周期内就可以读取32 位;否则,CPU需要两个总线周期才能读取32位。...9.内建函数 GNU C提供了大量内建函数,其中大部分是标准C库函数GNU C编译器内建版本,例如memcpy()等,它们与对应标准C库函数功能相同。...内建函数__builtin_constant_p(EXP)用于判断一个值是否为编译时常数,如果参数EXP值是常数,函数返回1,否则返回0。

    5.3K40

    string 性能优化之存储:栈或者堆

    对于C++开发人员来说,string大概是使用最多标准库数据结构之一,一直以来也就仅限于使用,对于底层实现似懂非懂。所以,最近抽出点时间,大致研究了下string底层实现。...那么string有没有类似Redis整数集合功能,进行类型升级呢?...PS:需要注意是,此优化自GCC5.1生效,也就是说对于GCC版本小于5,无论长度为多少,都从堆上进行分配。...(PS:GCC4.9.4版本输出,分配字节数大于实际字节数,这个是string一个优化策略,即预分配策略,在后面的内容中将会讲到)。...中预分配,其与_M_local_buf不能共存 从上述源码中,我们看到有个变量_M_local_buf,从字面意思看就是一个本地或者局部buffer,猜测是用来存储大小不足16字节内容,为了证实我们猜测

    59620

    关于JS字面量及其容易忽略12个小问题

    简要 问题1:不能使用typeof判断一个null对象数据类型 问题2:用双等号判断两个一样变量,可能返回false 问题3:对于非十进制,如果超出了数值范围,则会报错 问题4:JS浮点数并不精确,...问题3:对于非十进制,如果超出了数值范围,则会报错 八进制 八进制字面第一位必须是0,然后是八进制数字序列(0-7)。...在es6中,提供了一种模板字符串,使用反引号(`)定义,这也是一种字符串字面量。...模板标签函数参数,第一个一个被插值分割字符串数组,后面依次是插值变量。在模板标签函数中,可以有针对性对插值做一些技术处理,特别当这些值来源于用户输入时。...4部分组成: 关键词 function 函数名,可有可无 包含在括号内参数参数也是可有可无,括号却不能少 包裹在大括号内语句块,即函数要执行具体代码 (三)这是使用构造函数Function()

    3.1K20
    领券