반응형

Programming Tools/TCPL C Language 18

[C Language] Chap.3 Control Flow - Statement, Block, if-else (제어문 - 문장, 블록, if-else문)

Control Flow 제어문 statement와 block x = 0 i++ printf(...) 와 같은 것에 ;이 붙으면 문장(statement)가 된다. {}는 declaration과 statement를 한 곳에 모아준다. 이를 compound statement 혹은 block이라고한다. block은 하나의 statement와 동일하게 취급한다. 그래서 for, if while, else 등에 쓰이는 {}에는 ;이 안붙는 것이다. If - else문 if (expression) statement1 else statement2 다들 알다시피 expression이 맞으면 statement1이 동작하고 아니면 statement2가 동작한다. 물론 else문은 넣어도 되고 안넣어도 된다. 참고로 expr..

[C Language] Sequence Point (시퀀스 포인트)

시퀀스 포인트 시퀀스 포인트는 C언어 계열의 언어에서 매우 중요한 개념이므로, 두가지 주요 문서를 번역해서 정리하고자 한다. 다음은 C FAQ 3.8번 질문을 번역한 것이다. A sequence point is a point in time at which the dust has settled and all side effects which have been seen so far are guaranteed to be complete. (시퀀스 포인트는 모든 연산에 의한 결과가 완료되는 지점을 의미합니다.) Sequence point는 크게 세가지가 있다. at the end of the evaluation of a full expression (a full expression is an expression..

[C Language] Assignment Operators, Conditional Expressions, Precedence and Order of Evaluation , Sequence Point(대입 연산자, 조건 표현식, 삼항 연산자, 연산의 우선순위와 연산 순서, 시퀀스 포인..

Assignment Operators 대입 연산자 i = i + 2는 i += 2와 같다. 이렇게 하나의 연산자로 표현하는 것은 +뿐만이 아니다. + - * / % > & ^ | 등의 연산자 모두 =과 결합해서 하나의 대입연산자로 표현가능하다. 즉 expr1 op= expr2는 expr1 = expr1 op expr2와같다. 대입연산자의 범위에 주의해야한다. x *= y + 1 x = x * (y + 1) // 위의 표기와 같은 의미이다. x = x * y + 1 // 이것이 아니다. assignment operator는 코드를 간결하게하고 이해하기 쉽게 만들어준다. while((c = getchar()) != EOF)와 같은 표현을 기억할 것이다. 조건문 안에 들어있는 assignment operato..

[C Language] The C Programming Language - Increment, Decrement, Bitwise Operator(증감연산자, 비트연산자)

2.8 Increment and Decrement Operators ++n은 해당 라인이 동작하기 전에, n++는 해당 라인이 동작한 후에 작동한다. (i + j)++과 같은 코드는 illegal하다. 오직 하나의 variable에 대해서만 성립하는 연산자이다. 증감연산자를 통해 코드를 간결하게 만들 수 있다. 아래는 string에서 문자하나를 모두 없애는 함수이다. void squeeze(char s[], int c){ int i,m j; for(i = j = 0; s[i] != '\0'; i++) if(s[i] != c) s[j++] = s[i]; // j++; 안해도 된다. s[j] = '\0'; }strcat()이라는 두 string을 연결하는 함수를 예로 들면 아래와..

[C Language] The C Programming Language - Type Conversion, Type Casting(타입 컨버전, 타입 캐스팅, 자료형 변환)

Chap.2 : Types, Operators, and Expressions 2.7 Type Conversion(자료형 변환) 연산에 의한 자료형 변환 operator의 두 operands가 타입이 다르면 보통 narrow한 type이 wider한 type으로 변환된다. float형 변수를 subscription으로 쓰는 등의 말도안되는 conversion은 에러를 일으킨다. long -> short, float -> integer type으로의 변환 등 정보가 삭제되는, truncation이 일어나는 자료형은 컴파일러에서 warning을 내보내지만 error가 되지는 않는다. 주의 해야할 것 중 하나는 int s = '0'은 에러가 아니라는 것이다. string은 character과 다르..

어디선가 주워들은 임베디드 C언어 코딩 기술 - 3

1. 전처리문 : #include guards 전처리문은 Macro라고도한다. 말 그대로 문서내용을 복붙한다. 이 때문에 중복선언이 발생할 수도 있다. 다음의 경우를 보자 //main.h typedef struct ctrlBody{ int getsense; }TYPE_BODY_HANDLER; TYPE_BODY_HANDLER body; int sensordata; //ctrlBody의 getsense가 1이 될 떄데이터를 읽어 sensordata에 넣는다. // main.c #include #include main(){ //something while(1){ sensor(&body); ] } // sensor.h #include void sensor(TYPE_BODY_HANDLER *); // sensor..

어디선가 주워들은 임베디드 C언어 코딩 기술 - 1 (Embedded C language coding technology picked up somewhere)

1. 같은 자료형은 붙여서 선언하는 것이 메모리에 효율적이다. int a; int b; int c; long d; long e; long f; 2. UNION 비트필드의 구성 방법 공용체는 멤버 중에서 가장 큰 자료형의 공간을 공유한다. 이런 특성을 이용해서 가장 큰 자료형을 정의하고 이를 분할하는 여러 멤버들로 구성해서 bitfield를 만들 수 있다. 참고 : dojang.io/mod/page/view.php?id=453 주로 로봇의 작동 모드를 제어할 때 아래와 같이 작성한다고 한다. typedef union package_t{ struct{ uint32_t actionone:1; uint32_t actiontwo:1; uint32_t actionthree:1; uint32_t reserved:26..

반응형