C 언어 사용 주의사항 (1)

오리지널 작품http://blog.csdn.net/yming0221/article/details/7233564
더 보기
C 언어 사용 주의사항 (2)
C 언어 사용 주의사항 (3)
C 언어 사용 주의사항 (4)
1. getchar () 함수 의 사용 방법
getchar () 반환 값 은 int 형 으로 다음 과 같은 사용 방법 이 정확 하지 않 습 니 다.
#include 

int main()
{
        
        char tmp;
        while( (tmp=getchar())!=EOF )
        {
                printf("%c",tmp);
        }
        return 0;
}

EOF 의 매크로 정의 가 char 형 데이터 가 표시 하 는 범 위 를 초과 할 때 오류 가 발생 합 니 다. 이런 오 류 는 예측 하기 어렵 습 니 다.
char 의 수치 범 위 는 컴 파일 러 에 달 려 있다.GCC 컴 파일 러 의 char 는 signed char 를 표시 합 니 다.
따라서 tmp 의 유형 을 int 형 으로 바 꾸 어 오류 가 발생 하지 않도록 해 야 합 니 다.
2. 전역 변수의 사용 방법
cfaq.h
#ifndef _CAFQ_H
#define _CAFQ_H

//DEFINE(int, ex);
extern int ex;

void print();
#endif

cfaq.c
#include "cfaq.h"
int ex;
void print()
{
        printf("%d
",ex); }

main.c
#include 
#include "cfaq.h"
int ex=3;
int main(int argc,char **argv)
{
        print();
        return 0;
}

3. extern 키워드 사용
성명 변수 extern 수식 은 전역 변 수 를 표시 합 니 다.
수식 함 수 는 extern 수식 이 있 는 지 없 는 지 실질 적 인 차이 가 없다.
4. type: def 를 사용 하여 복잡 한 성명 을 설명 합 니 다. 다음 에 먼저 type: def 성명 크기 가 N 인 지향 문자 의 포인터 함수 의 포인터 배열 을 사용 합 니 다.
typedef char *pc;//문자 포인터 정의
typedef pc fpc();//반환 문자 포인터 의 함 수 를 정의 합 니 다.
typedef fpc *pfpc;//fpc () 함 수 를 가리 키 는 함수 포인터 정의
typedef pfpc fpfpc();//위 함수 포인터 함수 되 돌려 주기
typedef fpfpc *pfpfpc;//위 함수 의 지침
pfpfpc a[N];//위의 함수 포인터 의 배열 을 정의 합 니 다.
다음 말 과 같다
char *(*(a[N])())();
5. main () 함수 의 정확 한 정의
main () 함 수 는 int main () 또는 int main (void) 또는 int main (int argc, int * argv) 으로 밝 혀 야 합 니 다.
무 반환 값 경 고 를 없 애기 위해 void main () {} 으로 정의 할 수 없 지만, 호출 자가 기대 하 는 반환 순서 와 되 돌 릴 수 없 는 순 서 를 가 져 올 수 있 습 니 다.
6. char a [] = "String" 과 char * a = "String" 문자열 의 차이 점 초기 화
첫 번 째 방법 은 초기 화 된 후에 a [i] 의 값 을 수정 할 수 있 습 니 다. 두 번 째 방법 은 a [i] 의 값 을 수정 할 수 없습니다. 저장 공간 은 읽 기 전용 이 고 수정 할 때 오류 가 발생 합 니 다.
7. C 에서 매개 변수 전달 방식
C 에 서 는 인용 에 따라 전달 되 는 매개 변수 전달 방식 이 없습니다.
엄 밀 히 말 하면 C 는 항상 값 에 따라 전달 된다.인용 에 따라 전달 하고 포인 터 를 받 는 함 수 를 정의 한 다음 호출 할 때 & 조작 자 를 사용 할 수 있 습 니 다.사실 함수 에 배열 (포인터 가 들 어 오 는 경우 문제 6.4 및 기타 참조) 을 전달 할 때 컴 파일 러 는 본질 적 으로 인용 에 따라 전달 하 는 것 을 모 의 하 는 것 이다.그러나 C 는 공식 적 으로 인용 에 따라 전달 되 거나 C + + 의 인용 매개 변수 와 같은 것 이 없다.다른 한편, 유사 함수 의 예비 처리 매크로 는 '이름 에 따라 전달' 형식 을 제공 할 수 있다.
8. i + + 에 대한 정의
int i=3;
printf("%d",(i++)*(i++));나의 컴 파일 러 출력 결 과 는 12 가 아니 라 9 이다.이 유 는 접미사 자체 추가 와 접미사 자체 감소 연산 자 + 와 - 오래된 값 을 출력 한 후에 야 연산 을 수행 할 수 있 지만 여기 있 는 '이후' 는 항상 오 해 를 받 기 때 문 입 니 다.출력 변수의 원 치 를 확보 한 후, 표현 식 의 다른 부분 을 계산 하기 전에 바로 진행 할 수 있 도록 보장 하지 않 습 니 다.변수의 업데이트 가 표현 식 '완료' 이전의 어느 순간 에 진 행 될 것 이 라 고 장담 할 수 없습니다.이 예 에서 컴 파일 러 는 변 수 를 사용 하 는 낡은 값 을 곱 한 후에 두 사람 에 대해 자체 증가 연산 을 한다.
9. * p + + 의 의 미 는 자체 증가 지침 p 입 니까? 아니면 자체 증가 p 의 내용 입 니까?
* p + + 와 * (p + +) 등가, + 와 - 접두사 의 한 항목 조작 연산 자 보다 우선 순위 가 높 습 니 다. p 를 추가 하고 p 가 이전 주 소 를 추가 하 는 내용 을 되 돌려 주 는 것 을 의미 합 니 다.그래서 자신 이 헷 갈 리 면 괄호 로 나 쁜 의 미 를 없 애 라.
10. 왼쪽 값 과 오른쪽 값
말 그대로 왼쪽 값 은 = 호의 왼쪽 에 만 나타 나 고 할당 할 수 있 습 니 다.오른쪽 값 은 = 호의 오른쪽 끝 에 만 나타 날 수 있 고 할당 되 거나 증가 할 수 없습니다.
예 를 들 어 다음 char * 의 지침 은 int 형 데 이 터 를 가리 키 며 자체 증가 연산 을 하려 면.
그럼 아래 코드 가 맞 나 요?
((int *)p)++
답 은 부정 적 입 니 다. (int *) p 는 유형 전환 을 통 해 얻 을 수 있 기 때문에 유형 전환 은 일부 바 이 너 리 를 다른 유형 으로 보고 해당 하 는 대 우 를 하기 때 문 입 니 다.데이터 형식 변환 은 오른쪽 값 (R - value) 을 생 성하 기 때문에 이 를 수정 하거나 추가 할 수 없습니다.
다음은 GCC 4.5 의 컴 파일 오류 정보 입 니 다.

좋은 웹페이지 즐겨찾기