2017-02-20 10 views
5

나는이 구조체는 (color.h에) 이렇게 정의했다 :구조 변수를 이전에 정의하지 않고 함수 인수로 전달할 수 있습니까?

hsv hsvCol = {i/255.0, 1, 1}; 
rgb col = hsv2rgb(hsvCol); 

난 그냥 내부의 변수 hsvCol을 만들 수 있도록하려면 :

typedef struct rgb { 
    uint8_t r, g, b; 
} rgb; 

typedef struct hsv { 
    float h, s, v; 
} hsv; 

hsv rgb2hsv(rgb color); 
rgb hsv2rgb(hsv color); 

내가 다음 작동 main.c에서 다음을 변수를 생성하여 매개 변수로 전달하지 않고 hsv2rgb의 매개 변수

  1. 내가 할 수있는 :

    나는 어느 :(

    rgb col = hsv2rgb({i/255.0, 1, 1}); 
    rgb col = hsv2rgb(hsv {i/255.0, 1, 1}); 
    rgb col = hsv2rgb(hsv hsvCol {i/255.0, 1, 1}) 
    rgb col = hsv2rgb(struct hsv {i/255.0, 1, 1}); 
    

    내 질문은 컴파일 (위의 두 줄 대신에) 다음, 슬프게도 아무도의 각을 시도했습니다 내가 (하지만 분명히 다른 방법으로) 전혀 할 노력했다합니까?

  2. 하면 1을, 내가 이렇게 가야합니까 어떻게?

  3. 을3210
+4

'RGB hsv2rgb COL = ((HSV) {I로 다시 쓸 수있다 /255.0, 1, 1}); ' – BLUEPIXY

+0

Aw maaan, 너무 간단했습니다! 감사! –

답변

5

compound literal을 사용할 수 있습니다.

인용 C11 장 §6.5.2.5, 제 3 항,

초기화 의리스트를 둘러싸 중괄호 뒤에 괄호 형명 구성 후위 식 리터럴 화합물이다. 값이 이니셜 라이저 목록에서 제공되는 이름이없는 객체를 제공합니다.

하고, 제 5 항,

복합 리터럴 값은 그 초기화리스트 초기화 된 객체의 이름이다. [...]

그래서

hsv hsvCol = {i/255.0, 1, 1}; 
rgb col = hsv2rgb(hsvCol); 

과 같은 경우, 코드

rgb col = hsv2rgb((hsv) {i/255.0, 1, 1}); 
        ^^^^ ^^^^^^^^^^^^^ 
        |    | 
        |    -- brace enclosed list of initializers 
        -- parenthesized type name 
0

BLUEPIXY가 의견에서 말했듯이 내가해야 할 일은 (hsv)을 내 값 앞에 넣는 것입니다.

rgb col = hsv2rgb((hsv) {i/255.0, 1, 1});