标签: extern

Objective-C中的static,extern和inline

做什么static,extern并且inline(和它们的组合)使用LLVM编译器Objetive-C是什么意思?

另外,我注意到有CG_EXTERNCG_INLINE宏.我们应该使用那些吗?

(我找不到一个有明确解释的来源,所以我认为在这里创建一个可能有用,或者如果有人知道它可能会指向它)

static inline objective-c llvm extern

29
推荐指数
2
解决办法
2万
查看次数

为什么"extern const int n;" 不按预期工作?

我的项目只包含两个源文件:

a.cpp:

const int n = 8;
Run Code Online (Sandbox Code Playgroud)

b.cpp:

extern const int n;

int main()
{
    // error LNK2001: unresolved external symbol "int const n" (?n@@3HB)
    int m = n; 
}
Run Code Online (Sandbox Code Playgroud)

我知道有几种方法可以使它工作; 但是,我只是想知道为什么它不起作用?

c++ const declaration extern

27
推荐指数
2
解决办法
2万
查看次数

为什么在函数内局部初始化外部变量会产生错误?

这段代码很好编译:

extern int i = 10;

void test()
{
    std::cout << "Hi" << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

虽然这个错误:

void test()
{
    extern int i = 10;
    std::cout << "Hi" << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

错误:'我'有'extern'和初始化程序

我读了C++ Primer

包含显式初始值设定项的任何声明都是定义.我们可以在定义为extern的变量上提供初始化器,但这样做会覆盖extern.具有初始化程序的extern是一个定义.在函数内部的extern上提供初始化程序是错误的.

有人可以解释为什么如果在函数本地完成这应该是一个错误,而在全局范围内允许这样做?

c++ declaration definition extern

27
推荐指数
3
解决办法
2万
查看次数

在C中使用静态函数和变量的原因

我想知道使用static关键字作为文件中变量的范围限制,用C.

我认为构建C程序的标准方法是:

  • 有一堆c文件定义函数和变量,可能范围有限static.
  • 有一堆h文件声明相应c文件的函数和可能的变量,供其他c文件使用.私有函数和变量不会在h文件中发布.
  • 每个c文件都单独编译为o文件.
  • 所有o文件都链接到一个应用程序文件.

static如果变量未在h文件中发布,我认为声明gobal的原因有两个:

  • 一个是为了可读性.告知未来的读者,包括我自己,在任何其他文件中都不能访问变量.
  • 第二个是防止另一个c文件重新声明变量为extern.我认为链接器不喜欢变量是externstatic.(我不喜欢重新声明其他人拥有的变量的文件的想法,这extern是可以的做法吗?)

还有其他原因吗?

也是一样的static功能.如果原型未在h文件中发布,其他文件可能无法使用该函数,那么为什么要定义它static呢?我可以看到同样的两个原因,但没有更多.

c linker static extern

26
推荐指数
3
解决办法
2万
查看次数

为什么模板不能在extern"C"块中?

这是一个后续问题的答案,以是否有可能的typedef指针到extern-"C" -函数模板中的类型?

此代码无法使用g++Visual C/C++和Comeau C/C++进行编译,并且具有基本相同的错误消息:

#include <cstdlib>

extern "C" {
    static int do_stuff(int) {
        return 3;
    }

    template <typename return_t_, typename arg1_t_>
    struct test {
        static void foo(return_t_ (*)(arg1_t_)) { }
    };
}

int main()
{
    test<int, int>::foo(&do_stuff);
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

g ++说"错误:带C链接的模板",Visual C/C++发出编译器错误C2894,而Comeau C/C++说"错误:此声明可能没有extern"C"链接".

问题是,所有人都满意:

#include <cstdlib>

extern "C" {
    static int do_stuff(int) {
        return 3;
    }

    struct test {
        static void foo(int (*)(int)) { }
    };
}

int main()
{
    test::foo(&do_stuff); …
Run Code Online (Sandbox Code Playgroud)

c++ templates extern linkage

26
推荐指数
3
解决办法
2万
查看次数

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

我做了2个项目,第一个用C语言,第二个用C++编写,两个项目都有相同的行为.

C项目:

header.h

int varGlobal=7;
Run Code Online (Sandbox Code Playgroud)

main.c中

#include <stdio.h>
#include <stdlib.h>
#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;
}
Run Code Online (Sandbox Code Playgroud)

C++项目:

header.h

int varGlobal=7;
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include <iostream>
#include "header.h"
using namespace std;

void function(int i)
{
    static int a=0;
    int t=i;
    a++;
    i=varGlobal;
    varGlobal=t;
    cout<<"Call #"<<a<<":"<<endl<<"i="<<i<<endl<<"varGlobal="<<varGlobal<<endl<<endl; 
}

int main() {
    function(4);
    function(6);
    function(12);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我读到默认情况下全局变量是extern,在C++中默认是C和static ; 那么为什么C++代码有效呢?

我的意思是int …

c c++ static global-variables extern

26
推荐指数
2
解决办法
9万
查看次数

Javascript和WebGL,外部脚本

只是好奇; 如何将我的webgl着色器放在外部文件中?

目前我正在;

    <script id="shader-fs" type="x-shader/x-fragment">
        #ifdef GL_ES
            precision highp float;
        #endif

        void main(void)
        {
            gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
        }
    </script>

    <script id="shader-vs" type="x-shader/x-vertex">
        attribute vec3 aVertexPosition;

        uniform mat4 uMVMatrix;
        uniform mat4 uPMatrix;

        void main(void)
        {
            gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
        }
    </script>
Run Code Online (Sandbox Code Playgroud)

在我的html标题中,如何从外部文件中链接? - 我尝试了通常的javascript方法;

<script type="text/javascript" src="webgl_shader.js"></script>
Run Code Online (Sandbox Code Playgroud)

javascript external extern webgl opengl-es-2.0

25
推荐指数
2
解决办法
2万
查看次数

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

什么是之间的区别static inline,extern inline和正常的inline功能?

我已经看到了一些模糊的解释.据我所知,static inline不仅仅是一个inline仅在某个文件中引用的函数,因为static关键字通常意味着.这同样适用于extern inline过我想,这是不一样的解释与extern变量.任何答案将不胜感激!

c static extern inline-functions

25
推荐指数
1
解决办法
8011
查看次数

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

  1. 当我extern在方法或变量声明之前使用单词时,我是否将其设置为全局,因此在整个项目中可读/可写/可用?

  2. 如果我在关键字之前使用extern,那么我的项目的一部分仍然无法访问它吗?例如,仅由子类...例如当我使用"protected"时.

  3. extern是一个C关键字,对吗?Objective-C中是否有等价物?我实际上不明白为什么他们在Objective-C项目中使用C关键字.

谢谢

c objective-c extern globals

24
推荐指数
2
解决办法
2万
查看次数

extern关键字用法

我有三个程序,我使用extern关键字.我无法理解结果.以下是三个例子:

示例1:我期望下面的代码会给出多个声明的编译错误k.但它运作正常吗?

int k; //works fine
extern int k = 10;

void main()
{
    cout<<k<<endl;
    getchar();
}
Run Code Online (Sandbox Code Playgroud)

示例2:当我尝试在上面的示例中初始化"k"时,编译器会出错.为什么?

int k = 20; //error
extern int k = 10;

void main()
{
    cout<<k<<endl;
    getchar();
}
Run Code Online (Sandbox Code Playgroud)

示例3:在此示例中,我更改了示例1中提到的定义的顺序.当我编译此代码时,我收到错误.为什么?

extern int k = 10;
int k;   //error

void main()
{
    cout<<k<<endl;
    getchar();
}
Run Code Online (Sandbox Code Playgroud)

c++ keyword extern

23
推荐指数
4
解决办法
1万
查看次数