'PL/C'에 해당되는 글 3건

  1. 2009.04.11 선언이 안돼있어도 함수를 사용 by 언제나19
  2. 2008.10.11 O_RDONLY의 정의는 어느 헤더파일에? by izeye
  3. 2008.05.28 initializer element is not constant by izeye

float를 return하는 함수를 만들어서 연이어 호출하고 있었는데,
어느 순간에선가 이상한 값을 return한다.
1.0을 return해야 하는데, 10564238429 이런 비슷한 값을..

어떤 값인지 한참을 해메다가
*(int*)&r
한 값이란 걸 알았다.
float 값을 int로 해석한 것.

원인은 header file에 signature를 실수로 안 적었기 때문.
signature를 안적어도 에러가 나지 않고 실행이 되고 있었다. 짜증나.
그러니까 default로 return 값을 int로 해석했던 것.

이와는 별개로
void*를 float로 변환하고 싶을 때,
void* voidpointer(void);
union u {
float f;
long l;
};
u.l = (long)voidpointer();
라고 적으면 u.f를 쓸 수 있다.
Posted by 언제나19

댓글을 달아 주세요

fcntl.h
Posted by izeye

댓글을 달아 주세요

Source:

#include <stdio.h>

struct camproc_string {
 int index;
 char *name;
};

struct camproc_string vga_effect_wb[] = {
    {
        .index  = 0,
        .name = "WB Auto",
    },
    {
        .index  = 1,
        .name   = "WB Sunny",
    },
    {
        .index  = 2,
        .name   = "WB Cloudy",
    },
    {
        .index  = 3,
        .name   = "WB Incandescent",
    },
    {
        .index  = 4,
        .name   = "WB Fluorescent",
    },
};

struct camproc_effect_named {
 int index;
 struct camproc_string *items;
};

static struct camproc_effect_named vga_effect_named[] = {
    {
        .index  = 0,
        .items = *vga_effect_wb,
    },
};

int main(int argc, char *argv[])
{
 printf("%s\n", vga_effect_named[0].items->name);
 
 return 0;
}


Compile:

[jmlim@hera jmlim]$ gcc -o kdsoo kdsoo.c
kdsoo.c:39: initializer element is not constant
kdsoo.c:39: (near initialization for `vga_effect_named[0].items')
kdsoo.c:41: initializer element is not constant
kdsoo.c:41: (near initialization for `vga_effect_named[0]')
[jmlim@hera jmlim]$


Analysis:
단순 포인터 오류.

Solution:
.items = *vga_effect_wb,를 .items = vga_effect_wb로 수정한다.

Compile & Run:

[jmlim@hera jmlim]$ gcc -o kdsoo kdsoo.c
[jmlim@hera jmlim]$ ./kdsoo
WB Auto
[jmlim@hera jmlim]$
Posted by izeye

댓글을 달아 주세요