2010-12-30 1 views
0

나는 C89, C90, Ansi-C 코드를 작성 중이다. 내 함수 중 하나는 매개 변수로 구조체가 필요합니다. 그 구조체의 초기화로 함수를 호출하기를 원합니다. 구조체를 forst로 만들고 함수에 전달합니다.함수 호출에서 구조체의 초기화를 변수로 사용하는 방법은 무엇입니까? ANSI-C 버전

다음은 작동하는 스 니펫입니다. 여기

typedef struct { 
    char* EventName; 
    char* Message; 
} Event; 

Event myEvent = { 
    .EventName = "infomessage", 
    .Message = "Testmessage" 
}; 

Notify(myEvent);   

내가 일을

Notify({.EventName = "infomessage", .Message = "Testmessage"}); 

또는 더 나은

Notify({"infomessage", "Testmessage"}); 

EDIT를 작성하지만, 느릅 나무 나던하고자하는 것입니다 : 1990 표준 : LabCVI는 ISO 9899을 사용하고 있습니다.

+1

BTW : 그들은 ANSI-C가, 느릅 나무는 ISO-C90에 해당 말할 때 대부분의 사람들이 ANSI-C89을 의미; 마찬가지로 ISO-C99는 ANSI-C2000과 동일합니다. 내가 ANSI-C로 언급 한 사람이 C99를 언급 한 유일한 곳은 여기에있다. – Christoph

+0

아, 초보자 실수 일 수있다. 그러나 내가 읽은 모든 "현대적인"Ansi-C 책은 ... C99를 참조한다. 독일어로되어 있을지도 모릅니다. 내가 사용하고있는 IDE는 LabCVI 2010입니다. ++ 연산자와 구조체의 구성 요소 초기화를 이해하기 때문에 C99라고 생각했습니다. – Johannes

답변

2

화합물 문자 (Event){"infomessage", "Testmessage"}를 사용, 즉

Notify((Event){"infomessage", "Testmessage"}); 
+0

동일한 오류 - 불법적 인 표현이 생성됩니다. – Johannes

+1

@Johannes : http://zone.ni.com/devzone/cda/tut/p/id/8764에 따르면 LabWindows/CVI는 복합 리터럴을 지원하지 않습니다. 덧붙여 말하면 ANSI C99 – Christoph

+0

Interesting - C99는 복합 리터럴을 지원하지만 LabCVI 도움말은 복합 리터럴을 지원하지 않는 C90 표준만을 참조합니다. 그래서 C99 이상에서는 답이 옳지 만 그 아래 모든 것은 불가능합니다. – Johannes

관련 문제