问题标签 [gcc-extensions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
121 浏览

c++ - 使用 C++11 标准的哪些规则来确定 ({ ... }) 中表达式的类型

我不明白编译器在这里做了什么以及为什么它可以工作 c++ 代码

(1) 和 (2) 大括号之间的表达式类型是 const char*。经过一些实验后,我发现了由最后一部分确定的那种类型的 (1)-(2)-表达式。

这是一个示例代码。它适用于 c++11 及更高版本。 http://cpp.sh/5tb47

我的问题:它是如何工作的。

0 投票
0 回答
66 浏览

c - 错误:使用 GNU 复杂扩展时,在 'g_11' 之前需要 '='、','、';'、'asm' 或 '__attribute__'

我知道与上述问题有很多类似的问题,但是在向声明的全局变量附近的简单代码库添加 GNU 复杂扩展时遇到错误。

我尝试添加 __complex 和 _Complex 作为关键字,但两者都显示错误,还有任何特定位置要放置复杂关键字,例如。在限定符之前还是在变量名之前?

0 投票
2 回答
683 浏览

c - 用于变量属性的 GCC 扩展 __attribute__ ((未使用))

以下是 GCC 变量属性扩展的示例代码,

对于使用以下程序生成的上述程序的汇编代码:

.s 文件中不包含变量 sam,而程序的输出是“11”,这是正确的。那么编译器是否完全忽略了未使用的变量而不将其输出到可执行文件中?如果是这样,为什么程序的输出正确?谁能解释 gcc 中未使用和使用的变量属性的工作原理。

谢谢

0 投票
0 回答
170 浏览

c - GCC 语言扩展 __attribute__((vector_size(16))) 不兼容类型错误

在使用 Csmith 随机 C 程序生成器时,我尝试为 variable 添加一个 GNU C 语言变量扩展属性((vector_size(16)))。

其中为 int8_t(如签名字符)、int16_t(如 short)等提供了#define。并且 safe_rshift_func_int16_t_s_s 是内部定义的函数。

使用 gcc 编译上述程序会出现以下错误:

属性是不是放错了?我尝试参考此处链接的 GCC 门户中的文档,但无法准确理解此属性的正确用法,请有人指出吗?

在哪里使用这个属性有什么限制吗?感谢社区。!:)

我尝试搜索 SO 和 web,但他们中的大多数人都在谈论使用 typedef 作为他们的解决方案。

0 投票
1 回答
2122 浏览

c++ - Error: "cannot bind packed field" while inserting data into std::map using insert function

Can somebody tell me the difference between #pragma pack(push,1) and __attribute__((packed))? I am getting a compilation error if I use second type of struct packing which says

But if I use first type of struct packing then there is no compilation error.

This is my sample code:

0 投票
1 回答
450 浏览

c - gcc __attribute__ 位置之间的区别

在使用 gcc __attribute__ 处理函数时,我注意到代码生成会有所不同,具体取决于我放置属性的位置。在下面的示例中,我希望编译器不要优化我对 use() 的调用。

编译器:x86-64 gcc(主干)

选项:-O3 -Wall

但是,如果我更改属性的位置,则会生成不同的代码。

如果我不放置任何属性,我会得到:

现在,我在gcc_Common-Function-Attributes看到的属性都存在于函数声明中,而不是定义中。我不确定我是否应该只在声明中使用它们。(因为在定义中使用它们似乎在上面的一个实例中起作用)我的问题是放置 __attribute__ 的规则是什么,为什么上面的行为方式呢?我检查了gcc_Attribute-Syntax,但恐怕我不太了解它。

0 投票
0 回答
561 浏览

gcc - GCC 获取本地时区的构建日期和时间

GCC 提供了宏__DATE__,并提供了__TIME__带有构建日期和时间的字符串常量。然而,他们似乎在 UTC 中给出时间。是否有一些宏可以获取本地时区的构建时间?

0 投票
1 回答
276 浏览

c++ - "(void) cast" 与 "__attributes__" 用于消除未使用的参数警告之间的功能区别是什么?

virtual用 GCC 标记方法的未使用参数参数__attribute__((unused))和将参数强制转换为之间是否有任何功能差异(void)

两者都可以消除未使用的参数警告,如果以后使用该变量,它们都不会发出警告。虽然 GCC__attribute__更长。

0 投票
1 回答
249 浏览

c++ - 为什么这个复合语句作为由大括号和括号括起来的语句序列似乎不是有效的语句表达式

为什么这个复合语句作为由大括号(在 GNU C++ 中)和括号内括起来的语句序列似乎不是一个有效的语句表达式。

编译器输出:

我在What's this C++ 语法中找到了关于“语句表达式”的一个很好的答案,它在预期表达式的位置放置了一个大括号包围的块?

0 投票
1 回答
22 浏览

gcc - GCC:带有返回值的赋值块使宏更容易?

我隐约记得 GCC 有一个扩展,可以让你编写如下内容:

外部大括号内的代码将运行,返回值被分配给total.

这存在(如果确实存在的话)的主要目的是您可以=在类似于内联函数的宏中编写代码右侧的代码,但还允许您使用符号执行预处理器技巧,例如在宏上使用###从宏参数构造变量名和字符串的参数,内联函数无法做到这一点:

这真的存在吗?如果是这样,它叫什么,所以我可以进一步研究它?它是如何工作的?它是 C/C++ 标准的一部分吗?