今天我教了几个朋友如何使用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;
}    
我理解为什么struct b = a;不能工作 - 你不能operator =为你的数据类型重载.它是如何a = foo();编译罚款?这是否意味着什么struct b = …
我有一个程序(混合C和Fortran,虽然似乎没有相关性)nanosleep.但是,如果我timespec的tv_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);
}
显然,我实际上并不需要纳秒精度!
我还测试了一个版本,我检查了返回值; 它总是0(成功),因此rem输出参数(如果中断则剩余时间)从未设置.