做什么static,extern并且inline(和它们的组合)使用LLVM编译器Objetive-C是什么意思?
另外,我注意到有CG_EXTERN和CG_INLINE宏.我们应该使用那些吗?
(我找不到一个有明确解释的来源,所以我认为在这里创建一个可能有用,或者如果有人知道它可能会指向它)
我的项目只包含两个源文件:
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)
我知道有几种方法可以使它工作; 但是,我只是想知道为什么它不起作用?
这段代码很好编译:
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上提供初始化程序是错误的.
有人可以解释为什么如果在函数本地完成这应该是一个错误,而在全局范围内允许这样做?
我想知道使用static关键字作为文件中变量的范围限制,用C.
我认为构建C程序的标准方法是:
static.static如果变量未在h文件中发布,我认为声明gobal的原因有两个:
extern.我认为链接器不喜欢变量是extern和static.(我不喜欢重新声明其他人拥有的变量的文件的想法,这extern是可以的做法吗?)还有其他原因吗?
也是一样的static功能.如果原型未在h文件中发布,其他文件可能无法使用该函数,那么为什么要定义它static呢?我可以看到同样的两个原因,但没有更多.
这是一个后续问题的答案,以是否有可能的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) 我做了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 …
只是好奇; 如何将我的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) 什么是之间的区别static inline,extern inline和正常的inline功能?
我已经看到了一些模糊的解释.据我所知,static inline不仅仅是一个inline仅在某个文件中引用的函数,因为static关键字通常意味着.这同样适用于extern inline过我想,这是不一样的解释与extern变量.任何答案将不胜感激!
当我extern在方法或变量声明之前使用单词时,我是否将其设置为全局,因此在整个项目中可读/可写/可用?
如果我在关键字之前使用extern,那么我的项目的一部分仍然无法访问它吗?例如,仅由子类...例如当我使用"protected"时.
extern是一个C关键字,对吗?Objective-C中是否有等价物?我实际上不明白为什么他们在Objective-C项目中使用C关键字.
谢谢
我有三个程序,我使用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) extern ×10
c++ ×5
c ×4
static ×4
declaration ×2
objective-c ×2
const ×1
definition ×1
external ×1
globals ×1
inline ×1
javascript ×1
keyword ×1
linkage ×1
linker ×1
llvm ×1
templates ×1
webgl ×1