相关疑难解决方法(0)

从C中的函数返回`struct`

今天我教了几个朋友如何使用C structs.其中一个问你是否可以struct从一个函数返回一个函数,我回答说:"不!你会返回指向动态malloc编辑struct的指针."

来自主要使用C++的人,我期望无法struct按值返回s.在C++中,您可以operator =为对象重载并完全理解为具有按值返回对象的函数.但是,在C中,你没有那个选项,所以它让我思考编译器实际上在做什么.考虑以下:

struct MyObj{
    double x, y;
};

struct MyObj foo(){
    struct MyObj a;

    a.x = 10;
    a.y = 10;

    return a;
}        

int main () {

    struct MyObj a;

    a = foo();    // This DOES work
    struct b = a; // This does not work

    return 0;
}    
Run Code Online (Sandbox Code Playgroud)

我理解为什么struct b = a;不能工作 - 你不能operator =为你的数据类型重载.它是如何a = foo();编译罚款?这是否意味着什么struct b = …

c

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

nanosleep不适用于不到一秒的值

我有一个程序(混合C和Fortran,虽然似乎没有相关性)nanosleep.但是,如果我timespectv_sec值为0,则它​​根本不会睡眠.该tv_nsec值可以是一秒钟的微秒,但它不会睡眠.(如果tv_sec是的话1,它可以暂时休眠一下.)为什么会这样?

为了让事情更加混乱,usleep使用适当的值(即995000usec)按预期睡眠一秒钟.

我在RHEL 5.8和RHEL 6.4框中看到了这个问题.两者都在使用gcc.

这是调用nanosleep的函数:

void msleep(int *milliseconds)
{
    long usec;
    struct timespec sleep;
    usec = (*milliseconds) % 1000;
    sleep.tv_sec = (*milliseconds) / 1000;
    sleep.tv_nsec = 1000*usec;
    nanosleep(&sleep, NULL);
}
Run Code Online (Sandbox Code Playgroud)

显然,我实际上并不需要纳秒精度!

我还测试了一个版本,我检查了返回值; 它总是0(成功),因此rem输出参数(如果中断则剩余时间)从未设置.

c linux sleep

3
推荐指数
1
解决办法
4514
查看次数

标签 统计

c ×2

linux ×1

sleep ×1