在C(不是C++/C#)中,如何检查变量是否属于某种类型?
例如,像这样:
double doubleVar;
if( typeof(doubleVar) == double ) {
printf("doubleVar is of type double!");
}
Run Code Online (Sandbox Code Playgroud)
或者更一般:我如何比较两种类型,以便compare(double1,double2)评估为true,compare(int,double)并将评估为false.我还想比较不同构图的结构.
基本上,我有一个函数,它对"struct a"和"struct b"类型的变量进行操作.我想用"struct a"变量做一件事,用"struct b"变量做另一件事.由于C不支持重载并且void指针丢失其类型信息,我需要检查类型.顺便说一句,typeof如果你不能比较类型,那么拥有一个算子会有什么意义呢?
对于我来说,sizeof方法似乎是一个实用的解决方案.谢谢你的帮助.我仍然觉得它有点奇怪,因为类型在编译时是已知的,但是如果我想象机器中的进程我可以看到,为什么信息不是按类型存储,而是按字节大小存储.除了地址之外,大小是唯一真正相关的东西.
说我有一个结构
public struct Foo
{
...
}
Run Code Online (Sandbox Code Playgroud)
两者之间有什么区别吗?
Foo foo = new Foo();
Run Code Online (Sandbox Code Playgroud)
和
Foo foo = default(Foo);
Run Code Online (Sandbox Code Playgroud)
?
创建这样的结构后:
type Foo struct {
name string
}
func (f Foo) SetName(name string){
f.name=name
}
func (f Foo) GetName string (){
return f.name
}
Run Code Online (Sandbox Code Playgroud)
如何创建Foo的新实例并设置并获取名称?我尝试了以下方法:
p:=new(Foo)
p.SetName("Abc")
name:=p.GetName()
fmt.Println(name)
Run Code Online (Sandbox Code Playgroud)
没有打印,因为名称是空的.那么如何设置并获取结构中的字段?
我在现有代码库中有以下(工作)代码,用于C和C++之间共享的包含文件,在MSVC(2010)和Windows DDK上编译:
struct X {
USHORT x;
} typedef X, *PX;
Run Code Online (Sandbox Code Playgroud)
和:
enum MY_ENUM {
enum_item_1,
enum_item_2
} typedef MY_ENUM;
Run Code Online (Sandbox Code Playgroud)
据我所知,正确的定义应如下所示:
typedef struct {
USHORT x;
} X, *PX;
Run Code Online (Sandbox Code Playgroud)
有下面的表格是否有任何目的?我错过了什么吗?
最近在我的C肌肉上工作,并查看我一直在使用它的许多图书馆,这当然让我很好地了解了什么是好的做法.我没见过的一件事是一个返回结构的函数:
something_t make_something() { ... }
Run Code Online (Sandbox Code Playgroud)
从我所吸收的,这是"正确"的方式:
something_t *make_something() { ... }
void destroy_something(something_t *object) { ... }
Run Code Online (Sandbox Code Playgroud)
代码片段2中的体系结构比片段1更受欢迎.所以现在我问,为什么我会直接返回一个结构,就像在代码片段1中一样?当我在两种选择中做出选择时,我应该考虑哪些差异?
此外,该选项如何比较?
void make_something(something_t *object)
Run Code Online (Sandbox Code Playgroud) 如果我使用如下自动属性在C#中定义结构:
public struct Address
{
public Address(string line1, string line2, string city, string state, string zip)
{
Line1 = line1;
Line2 = line2;
City = city;
State = state;
Zip = zip;
}
public string Line1 { get; protected set; }
public string Line2 { get; protected set; }
public string City { get; protected set; }
public string State { get; protected set; }
public string Zip { get; protected set; }
}
Run Code Online (Sandbox Code Playgroud)
当我尝试构建文件时,我收到编译错误说The 'this' object cannot be …
我应该在我的任意结构中实现什么成员才能使以下任务成为可能:
public struct MyStruct {
String s;
Int length;
}
MyStruct myStruct = new MyStruct { s = "Hello", length = 5 };
// Now, I want the following code to set the 's' to "Lol" and the
// length to 3 (length of "Lol"). The second part should be done
// automatically.
myStruct = "Lol"; // Or myStruct = String("Lol");
Run Code Online (Sandbox Code Playgroud)
该怎么做?
我知道我可以按成员复制结构成员,而不是我可以在结构上进行复制memcpy吗?
这样做是否明智?
在我的结构中,我有一个字符串也作为成员,我必须复制到具有相同成员的另一个结构.我怎么做?