- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这段代码是否正确?
extern "C" extern int x; // 1
extern extern "C" int y; // 2
extern "C" extern "C" int z; // 3
int main() { }
gcc 拒绝 1 和 2 作为语法错误并接受 3。clang 接受所有这三个,但对它们全部给出重复声明说明符警告。
可能相关的是 C++17 [dcl.stc]/5:
The
extern
specifier can be applied only to the names of variables and functions. Theextern
specifier cannot be used in the declaration of class members or function parameters. For the linkage of a name declared with anextern
specifier, see 6.5. [Note: Theextern
keyword can also be used in explicit-instantiations and linkage-specifications, but it is not a storage-class-specifier in such contexts. —end note ]
最佳答案
extern extern "C"
不是有效语法,因为 extern "C"
不是说明符,因此不能出现在 decl-specifier-seq 中。相反,extern "C"
只能作为链接规范的一部分出现,其语法是
extern
string-literal{
declaration-seq(opt)}
extern
string-literal declaration
因此,extern "C"
必须先出现。
此外,根据 [dcl.link]/7,extern "C"extern
也是无效的:
A declaration directly contained in a linkage-specification is treated as if it contains the
extern
specifier (10.1.1) for the purpose of determining the linkage of the declared name and whether it is a definition. Such a declaration shall not specify a storage class.
(extern
是存储类说明符。)
虽然似乎没有任何规则禁止extern "C"extern "C"
。
关于c++ - 是否允许 extern extern "C"和 extern "C"extern?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57518041/
这段代码是否正确? extern "C" extern int x; // 1 extern extern "C" int y; // 2 extern "C" extern
根据 C++ Primer ,我们可以为定义为 extern 的变量提供初始化程序,但这样做会覆盖 extern。具有初始值设定项的 extern 是一个定义: extern double pi =
使用 Cuda 5.0、VS2010 这个项目在 VS2012 中编译和链接很好,但是 VS2012 不支持 Nsight 调试所以我也在 VS2010 中开发。所以我有一个 VS2010 项目文件,
这个问题已经有答案了: How do I use extern to share variables between source files? (19 个回答) Different compilat
我正在编写供 C 程序使用的 C++ 共享库。但是,我对 extern 和 extern "C" 有疑问。 考虑以下代码 我的头文件是这样的: #ifdef __cplusplus
我对整个 header 使用 extern "C" 说明符,还是为每个函数指定 extern 有区别吗? 据我所知,没有,因为只有函数和变量可以外部链接,所以当我在每个函数原型(prototype)和
这个问题在这里已经有了答案: What is the effect of extern "C" in C++? (17 个答案) 关闭 7 年前。 我见过 C/C++ 代码使用在函数签名中声明的 e
所以我使用 svn:externals 来检查一个外部仓库。外部仓库有自己的 svn-externals 设置。 现在,当更新我的项目的工作副本时,来自外部存储库的文件正在更新,但它的外部文件没有。该
是否可以忽略 svn:externals 属性中引用的标记的外部依赖性?这听起来像是一个很奇怪的问题,但让我解释一下...... 我收集了大量独立的“可插入”代码模块,每个模块都可以作为独立项目进行独
我见过 2 种创建全局变量的方法,有什么区别,什么时候使用它们? //.h extern NSString * const MyConstant; //.m NSString * const MyCo
我在 test 模块下通过 stripe api 在 stripe 中创建了一个帐户。并与该账户绑定(bind)一个银行账户。转到 Stripe dashboard -> connect -> acc
我在下面有一个代码。它是由 qemu 程序(一个 C 程序)使用 dlopen 加载的动态共享库的一部分。 extern "C" { extern uint64_t host_virt_offset;
C++ Primer 第 5 版第 60 页讨论了如何跨文件共享 const 变量 //file_1.cc extern const int bufSize = fcn(); //file_1.h e
这个 Unresolved external 问题有什么问题?我正在尝试将其实现到我的 MFC 应用程序的 InitInstance 中。但是我从调试器中收到此行错误。 LNK2019: unreso
在 C++ 中,extern(后面不跟语言链接字符串文字)似乎对命名空间范围 (Difference between declaration of function with extern and w
假设我有 3 个文件:file1.c、file2.c 和 globals.h。 file1.c 和 file2.c 都包含 globals.h。 file1.c 包含 file2.c 需要使用的结构。
我正在为具有 16 位安装程序的旧 CD-ROM 游戏编写新的安装程序,安装程序需要在硬盘上并且能够从原始光盘复制文件。如果所有游戏文件都打包在安装程序中,我已经设置了一个可以安装游戏的脚本,这适合个
在编译我的代码时,我收到此错误。 1>MSVCRTD.lib(crtexe.obj):错误 LNK2019:函数 ___tmainCRTStartup 中引用了未解析的外部符号 _main1>C:\U
我试图将 cimg 库包装在 c++/clr 中,当我尝试构建它时,我遇到了一堆链接错误。 Error 20 error LNK2028: unresolved token (0A0002AC)
我一直遇到这两个错误,但我似乎找不到有效的解决方案。 LNK1120: 1 unresolved externals Error 1 error LNK2019: unresolved externa
我是一名优秀的程序员,十分优秀!