- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在查看开源 C 代码时,我发现了一个头文件,其中包含如下代码:
typedef struct MY_STRUCT {
//structure members
//...
} my_struct_t;
MY_STRUCT int funcA();
MY_STRUCT int funcB();
我的问题是:添加MY_STRUCT
的目的是什么?在函数原型(prototype)前面?
感谢您的帮助。
编辑:原来是MY_STRUCT
函数原型(prototype)中涉及编译器相关扩展的宏。我找到了以下宏。
#define DUMMY __attribute__ ((visibility ("default")))
#define MY_STRUCT DUMMY
但是,我现在可以认为使用 MY_STRUCT
是不好的编码吗?作为结构的名称?或者这看起来是故意的吗?
最佳答案
此代码使用编译器特定的扩展,可能是 GCC。其目的是设置 my_struct_t
、FuncA
和 FuncB
的可见性。根据 GCC 关于可见性的文档:
Default visibility is the normal case for the object file format. This value is available for the visibility attribute to override other options that may change the assumed visibility of entities.
On ELF, default visibility means that the declaration is visible to other modules and, in shared libraries, means that the declared entity may be overridden.
On Darwin, default visibility means that the declaration is visible to other modules.
Default visibility corresponds to "external linkage" in the language.
这当然表明代码是使用标志(例如 -fvisibility=hidden
)编译的,默认情况下不会将符号置于 default
可见性中,这是正常的例如编译动态库时。基本上默认
可见性意味着符号应该在动态库中外部可见。
另请注意,通过设置类型的可见性,他们使用仅在 C++ 模式下允许/有意义的构造。
关于这是不好还是好的做法的问题是见仁见智的。人们普遍认为,只对属于动态库 API 一部分的函数启用外部可见性,并且出于各种原因,通常使用宏来实现这一点(部分是因为不同的编译器不同,但也因为您想要以不同的方式声明它们)然后使用该库时)。
但是,使用宏名称 MY_STRUCT
恕我直言,它会令人困惑,显然它也会让您和其他人感到困惑。人们不会期望 MY_STRUCT
成为使符号在外部可见的“神奇符号”。我建议将其命名为 MYLIB_API
或类似名称。
关于c - 在 C 函数原型(prototype)中添加结构名称,返回数据类型之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37874723/
我正在尝试做这样的事情:Name[i] = "Name"+ (i+1) 在 forloop 中,这样数组的值将是:Name[0] = Name1,Name[1] = Name2,Name[2] = N
我读了here,在GSP中我们可以这样写: ${params.action} 从GSP中,我们可以使用${params.action}作为参数调用Javascript函数(请参阅here)。 是否有其
我的问题:非常具体。我正在尝试想出解析以下文本的最简单方法: ^^domain=domain_value^^version=version_value^^account_type=account_ty
我创建了一条与此类似的路线: Router::connect("/backend/:controller/:action/*"); 现在我想将符合此模式的每个 Controller 路由重命名为类似
我在 Visual Studio 2013 项目中收到以下警告: SQL71502 - Procedure has an unresolved reference to object 最佳答案 这可以
任何人都可以指导我使用名称/值 .NET 集合或 .NET 名称/值字典以获得最佳性能吗?请问最好的方法是什么?我的应用程序是 ASP.NET、WCF/WF Web 应用程序。每个集合应该有 10 到
我在 Zend Framework 2 中有一个默认模块: namespace Application\Controller; use Zend\Mvc\Controller\AbstractActi
这是表格: 关于javascript - 在 javascript 中,这是一个有效的结构吗? : document. 名称.名称.值?,我们在Stack Overflow上找到一个类似的
HtmlHelper.ActionLink(htmlhelper,string linktext,string action) 如何找出正确的路线? 如果我有这个=> HtmlHelper.Actio
我需要一些有关如何将 Controller 定义传递给嵌套在 outer 指令中的 inner 指令的帮助。请参阅http://plnkr.co/edit/Om2vKdvEty9euGXJ5qan一个
请提出一个数据结构来表示内存中的记录列表。每条记录由以下部分组成: 用户名 积分 排名(基于积分)- 可选字段- 可以存储在记录中或可以动态计算 数据结构应该支持高效实现以下操作: Insert(re
错误 : 联合只能在具有兼容列类型的表上执行。 结构(层:字符串,skyward_number:字符串,skyward_points:字符串)<> 结构(skyward_number:字符串,层:字符
我想要一个包含可变数量函数的函数,但我希望在实际使用它们之前不要对它们求值。我可以使用 () => type 语法,但我更愿意使用 => type 语法,因为它似乎是为延迟评估而定制的。 当我尝试这样
我正在编写一个 elisp 函数,它将给定键永久绑定(bind)到当前主要模式的键盘映射中的给定命令。例如, (define-key python-mode-map [C-f1] 'pytho
卡在R中的错误上。 Error in names(x) <- value : 'names' attribute must be the same length as the ve
我有字符串,其中包含名称,有时在字符串中包含用户名,后跟日期时间戳: GN1RLWFH0546-2020-04-10-18-09-52-563945.txt JOHN-DOE-2020-04-10-1
有人知道为什么我会收到此错误吗?这显示将我的项目升级到新版本的Unity3d之后。 Error CS0103: The name `Array' does not exist in the curre
由于 Embarcadero 的 NNTP 服务器从昨天开始就停止响应,我想我可以在这里问:我使用非数据库感知网格,我需要循环遍历数据集以提取列数、它们的名称、数量行数以及每行中每个字段的值。 我知道
在构建Android应用程序的子项目中,我试图根据根build.gradle中的变量设置版本代码/名称。 子项目build.gradle: apply plugin: 'com.android.app
示例用例: 我有一个带有属性“myProperty”的对象,具有 getter 和 setter(自 EcmaScript 5 起支持“Property Getters 和 Setters”:http
我是一名优秀的程序员,十分优秀!