小编bol*_*eto的帖子

浮点常数比较 - (0.0?1:0)

在下面的例子中,如果取消注释float f = 0.0;,
和更换return(0.0 ? 1 : 0);return(f ? 1 : 0);.
输出是NIL.

这是我的代码:

/* file main.c 
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
cl -W4 -MTd -O2 -TC main.c -Fetest */   
#include <stdio.h>    
int my_func(void)
{
   /* float f = 0.0; */
   return(0.0 ? 1 : 0);
}
int main(void)
{  
    printf("%s\n", ( my_func() ? "ONE" : "NIL") );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在32位Windows计算机上,使用Visual Studio,此代码输出:

ONE
Run Code Online (Sandbox Code Playgroud)
  • 为什么my_func() …

c windows floating-point visual-studio

12
推荐指数
1
解决办法
691
查看次数

函数返回值的生命周期是多少?

我阅读了return函数调用之间的值,
并尝试使用以下代码片段:

/* file structaddr.c */
#include <stdio.h>    
#define MSIZE 10

struct simple
{   
    char c_str[MSIZE];
};
struct simple xprint(void)
{
    struct simple ret = { "Morning !" };
    return ret;
}
int main(void)
{   
    printf("Good %s\n", xprint().c_str);    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译代码时没有错误和警告.
使用GCC 4.4.3(Ubuntu 4.4.3-4ubuntu5.1)Visual C++编译器进行测试.

 gcc -m32 -std=c99 -Wall -o test  structaddr.c  
 cl -W3 -Zi -GS -TC -Fetest structaddr.c
Run Code Online (Sandbox Code Playgroud)

输出:
早上好!

我对结果感到有些困惑.
代码写得正确吗?

我的问题 :

  • 函数return值的可见性是什么(上例中的数组 struct),以及如何正确访问它们?

  • 哪里结束了一生的return价值?

c gcc visual-c++ gcc4

5
推荐指数
1
解决办法
1767
查看次数

__DATE__宏的格式不同

C有一个预定义的宏__DATE__,它显示已编译源文件的日期.
日期以"Mmm dd yyyy"格式显示.

有没有办法使用宏格式化这个日期?
以这种格式"yyyy Mmm dd".

而不是:

2013年7月19日

应该 :

2013年7月19日

c c++ macros

4
推荐指数
2
解决办法
8427
查看次数

将数据浮动到uint8_t和memcpy,返回null

我有一个float变量,需要作为uint8_t传递给函数.

如何转换回浮动原始值.

码:

bool SetAnalog(uint8_t number, float voltage, MessagePriority priority, Callback clbck)
{
    uint8_t args[2];
    args[0] = number;
    memcpy(&(args[1]),&voltage,sizeof(float));

    PTCLoopOutMessage* message = parent()->GetLoopOutMessage(this,
                                                             this->address(),
                                                             _OutputVoltage,
                                                             "DACVoltage",
                                                             args,
                                                             sizeof(args),
                                                             Device,
                                                             priority);
    message->SetCallback(clbck);

    return ProcessOutMessage(message);
}
Run Code Online (Sandbox Code Playgroud)

我试图从uint8_t数组中取回浮点原始值并需要分配到探测[channel]

uint8_t channel = message->GetOutMessage()->GetData()->data[0];
unsigned char* value = &message->GetOutMessage()->GetData()->data[1];
memcpy(&__output.output.probe[channel].dac, value, sizeof(float));
Run Code Online (Sandbox Code Playgroud)

我总是得到0的价值,

请帮忙

c c++ floating-point

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

指向多个源文件之间共享的数组的指针

这是我的文件1,名为main.c

#include <stdio.h>
#include <stdlib.h>

#define MONTHS 12
void ChangeDay(void);
int* days;

int main(void)
{
    days = (int*) malloc(MONTHS * sizeof(int));
    if(days != NULL)    
        ChangeDay();    
    else    
        return 1;   
    printf("%2d.\n", days[0]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

全局变量days被声明为指向type的指针int, malloc用于为12个整数分配空间.

这是我的文件2,名为day.c

int days[];
void ChangeDay(void)
{
    days[0] = 31;
}
Run Code Online (Sandbox Code Playgroud)

ChangeDay调用该函数时,十进制值31将分配给数组的第一个元素.

这是代码输出:

root @ where:~gcc -m32 -Wall -o day main.c day.c
day.c:1:warning:数组'days'假设有一个元素
root @ where:〜./ day分段错误

如果你向我解释这个结果,我将不胜感激.

我的问题:

  • 在多个源文件中声明变量(包括数组)的正确方法是什么?
  • 当在不同的文件中声明它们时,如何使用指针访问数组的元素?

c gcc gcc4

2
推荐指数
1
解决办法
3216
查看次数

标签 统计

c ×5

c++ ×2

floating-point ×2

gcc ×2

gcc4 ×2

macros ×1

visual-c++ ×1

visual-studio ×1

windows ×1