C언어 질문 드립니다.

hoya128의 이미지

아무리 고심해도 답이 안보여서 질문 드립니다.

일단 코어 로직 부분에 다름과 같은 루프가 있다고 합시다.

for (loop = 0; loop < threshold; ++loop) {
array[loop] = DEFINE_"loop"
}

다음으로 사용자에게 옵션 형태로 입력을 받는 다음과 같은 부분이 있다고 합니다.

#define threshold 2 // 사용자가 결정.
#define DEFINE_0 0 // 사용자가 알아서 결정.
#define DEFINE_1 1 // 즉, 어떤 값이 올 지 모름.

이런 형식으로 설계를 했는데, 구현 부분에서 막혀버립니다. ㅠ_ ㅠ

위와 같이 사용자에 의존적인 부분과 코어부분을 분리하고, 사용자는 해당 정의만 신경쓰면 알아서 정의한 값이 들어가도록 하고 싶은 것이 목적인데...

방법이 없을까요?

ymir의 이미지

별도로 lookup table 을 만드는게 나을 것 같네요.
macro 로는 자동으로 치환시킬 수 없을 겁니다.

static int DF(unsigned int x)
{
    int array[threshold] = {DEFINE_0, DEFINE_1};
 
    if (x < threshold)
        return array[x];
    else
        return -1;
}

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

jhandsj의 이미지

간단하게 해보려고 했는데 힘드네요.. ^^
loop를 돌린 이유가 define 값이 몇 개가 들어갈 지 몰라서 그렇게 한 거거든요 ㅎㅎ
몇 개를 하던 네이밍 규칙만 따르면 자동 초기화가 되도록 말이죠.
아무래도 말씀해주신 형태로 유저에게 상한치를 알려주고 이 이상은 쓸 수 없다는 방향으로 설계를 수정해야 하겠네요. ^^
도움 주셔서 감사드립니다.

klara의 이미지

#define은 컴파일 타임에 결정됩니다. 런타임에 결정되게 하고 싶고, 어떤 값이 어떤 이름으로 들어갈지도 모른다면 그냥 key-value 쌍의 자료구조(hash나 map(tree))를 이용하세요.

hoya128의 이미지

개발 환경이 좀 괜찮으면 그렇게 하겠는데.. 현재 임베디드 플랫폼이거든요. ^^;;
지금은 STM32F1 시리즈로 개발을 하고 있지만, 최종단계는 80251이 될 것이고..
컴파일러 버그에도 시달린 경험이 있고, 그 때문에 컴파일러 회사들이랑도 일하고 했던 경험이 있어서인지 heap도 못쓰게 합니다. ㅎㅎ
검증을 안해봤는데 양산 단계에서 문제 생기면 난리난다는 이유로요. ^^
또, 임베디드 환경이다보니 코드 사이즈나 메모리 사이즈 제약도 엄청 심해서 뭔가를 쓰기가 참 애매하네요 ㅠ_ ㅠ;;
일단 threshold 제한을 두고 몇 개 이상은 지원할 수 없다라고 못 박은 후에,
loop대신 switch-case 등으로 해결을 봐야할 것 같습니다.
도움 감사드려요~^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.