Tag: extern

默认情况下全局变量是extern还是等于在全局中使用extern声明变量?

我经历了两个问题, C和C ++中的静态和外部全局变量 C中的全局变量是静态的还是不是? 这两个问题以不同的方式说明了这两件事。 问题1的答案: Global variables are not extern nor static by default on C and C++. 问题2的答案: If you do not specify a storage class (that is, the extern or static keywords), then by default global variables have external linkage 我需要知道以下内容。 默认情况下,全局变量是extern在链接(或)中它是否相当于通过指定extern存储类来声明变量? 2.默认情况下,全局变量在范围(或)中是静态的,它等同于通过指定静态存储类来声明变量? 3.如果有任何c或c ++差异请澄清?

如何从C调用C ++方法?

我有一个C ++类,我正在用一些C文件编译它。 我想调用一个用C ++定义的函数,实际上是在C ++类中,所以我该怎么做? 以下声明显示我在说什么:可能存在语法错误: serial_comm.cpp class MyClass { void sendCommandToSerialDevice(int Command, int Parameters, int DeviceId) { //some codes that write to serial port. } } external.c int main(int argc, char ** argv) { //what am I going to write here? }

C中是否需要extern关键字function?

在我看来,即使我在另一个带有extern声明的文件中引用一个函数,gcc仍然可以编译该单元。 所以我想知道extern声明是否有必要在函数的任何地方? 我知道你需要extern变量。

函数声明只需要extern“C”吗?

我写了一个C ++函数,我需要从C程序调用。 为了使它可以从C调用,我在函数声明中指定了extern “C” 。 然后我编译了C ++代码,但编译器(Dignus Systems / C ++)为该函数生成了一个错位的名称 。 所以,它显然没有尊重extern “C” 。 为了解决这个问题,我在函数定义中添加了extern “C” 。 在此之后,编译器生成了一个可从C调用的函数名。 从技术上讲,只需要在函数声明中指定extern “C” 。 这是正确的吗? ( C ++ FAQ Lite就是一个很好的例子。)你是否还要在函数定义中指定它? 这是一个certificate这一点的例子: /* ———- */ /* “foo.h” */ /* ———- */ #ifdef __cplusplus extern “C” { #endif /* Function declaration */ void foo(int); #ifdef __cplusplus } #endif /* […]

从不同的VS2010项目中的C ++代码调用C函数时出现链接器错误

我正在尝试包含我在C ++项目中找到的一些C代码。 该函数在C文件中定义如下。 #ifdef __cplusplus extern “C” { #endif extern char *dtoa(double, int, int, int *, int *, char **); extern char *g_fmt(char *, double); extern void freedtoa(char*); #ifdef __cplusplus } #endif char * g_fmt(register char *b, double x) { 我在其中包含的VS项目正在创建一个dll。 该文件正在编译为C,项目中的其他文件正在编译为C ++。 我添加了一个标题以包含在我的C ++文件中 #ifndef G_FMT_H #define G_FMT_H #ifdef __cplusplus extern “C” { #endif […]

C中的全局变量是静态的还是不是?

默认情况下,C static或extern是全局变量吗? 如果全局变量默认是静态的,那么它意味着我们可以在单个文件中访问它们,但我们也可以在不同的文件中使用全局变量。 这是否意味着默认情况下它们具有外部存储?

C和C ++中的静态和外部全局变量

我做了2个项目,第一个用C语言,第二个用C ++编写,两个项目都有相同的行为。 C项目: header.h int varGlobal=7; main.c中 #include #include #include “header.h” void function(int i) { static int a=0; a++; int t=i; i=varGlobal; varGlobal=t; printf(“Call #%d:\ni=%d\nvarGlobal=%d\n\n”,a,i,varGlobal,t); } int main() { function(4); function(6); function(12); return 0; } C ++项目: header.h int varGlobal=7; main.cpp中 #include #include “header.h” using namespace std; void function(int i) { static int a=0; int […]

静态内联,外部内联和普通内联函数之间有什么区别?

static inline , extern inline和普通inline函数之间有什么区别? 我已经看到了一些模糊的解释。 据我所知, static inline不仅仅是一个inline函数,只能在某个文件中引用,因为static关键字通常意味着。 extern inline也是如此,我想,这与extern变量的解释不一样。 任何答案将不胜感激!

关于Objective-C项目中使用的extern的3个问题

当我在方法或变量声明之前使用extern一词时,我是否将其设置为全局,因此在整个项目中可读/可写/可用? 如果我在关键字之前使用extern,那么我的项目的一部分仍然无法访问它吗? 例如,仅由子类…例如当我使用“protected”时。 extern是一个C关键字,对吧? Objective-C中是否有等价物? 我实际上不明白为什么他们在Objective-C项目中使用C关键字。 谢谢

C – 通过const声明访问非const

是通过C标准允许的const声明访问非const对象吗? 例如,以下代码保证在符合标准的平台上编译和输出23和42? 翻译单位A: int a = 23; void foo(void) { a = 42; } 翻译单位B: #include extern volatile const int a; void foo(void); int main(void) { printf(“%i\n”, a); foo(); printf(“%i\n”, a); return 0; } 在ISO / IEC 9899:1999中,我刚刚发现(6.7.3,第5段): 如果尝试通过使用具有非const限定类型的左值来修改使用const限定类型定义的对象,则行为未定义。 但在上面的例子中,对象没有定义为const (只是声明)。 UPDATE 我终于在ISO / IEC 9899:1999中找到了它。 6.2.7,2 引用同一对象或函数的所有声明都应具有兼容类型; 否则,行为未定义。 6.7.3,9 要使两种合格类型兼容,两者都应具有相同类型的兼容类型; […] 所以,它是未定义的行为。