궁금중..리눅스
두 개의 파일에서 한쪽에 static struct temp[10] ;인데 다른 파일에서 include도 안하고 아무런 조치를 취하지 않았는데 이 변수를 다룰 수 있나요?? 당연히 없을 거 같은데..,
그리고 어떻게 하면 참조 할 수 있는지 도 알려 주십시요..
/* Definitions Related to Chip Address and CPU Physical Address
* cpu_phy_add: CPU Physical Address , it uses 32 bit data per address
* chip_add : Chip Address, it uses double word(64) bit data per address
*/ 이 부분은 주석이구요
#define chip_add(cpu_phy_add) (cpu_phy_add-0x400)/8
#define cpu_phy_add(chip_add) (8*chip_add)+0x400
이 부분이 define 부분인데 define 부분을 보시면 아시겠지만
Chip_add가 cpu_phy_add를 인자로 받고 있고 마찬 가지로 cpu_phy_add는 chip_add를
인자로 받고 있는데 이렇게 되면 define 문은 어떤 결과가 나오는지 궁금합니다.
Typedef void (*usb_complete_t)(struct urb*); 이라는 함수원형이 있는데,
다음과 같이 선언하고 있습니다.
Usb_complete_t complete;
그리고 다음과 같이 호출을 하는데 가능한가요?
그리고 함수 포인터를 선언하고 있는데 구현된 부분은 어디에도 없거든요 그렇다고 다른 함수를 이 함수포인터에 주소값을 주지도 않았는데 ex>usb_complete_t = temp;(임의의 함수)
Urb->complete(urb) 이게 가능한지… 결과는 어떻게 나올까요?
아니면 이 함수가 이미 다 구현이 되어있는 오퍼레이션 함수인가…그건가요?
이 부분에 대해서도 고수님 답변 부탁드립니다.
File operation.
#define PORT_RESET (1 <<8) <- 이런거 결과값은 무엇인지 궁금합니다.
unsigned char hide:1; <- do you know???
첨부 | 파일 크기 |
---|---|
![]() | 168.96 KB |
만약 두 파일간에 공유를 목적으로 하신다면 안된다는 말씀을 먼저 드립니다
만약 두 파일간에 공유를 목적으로 하신다면 안된다는 말씀을 먼저 드립니다.
기본적으로 static 으로 정의된 함수나 변수의 영역은 해당 파일에만
영향을 미치게 됩니다. 다른 .c 파일에서 정의된 변수를 사용하고자
한다면 변수를 최초에 선언하는 파일에서는 그냥 int a = 5; 와 같이 정의하시고
a 변수를 이용하고자 하는 파일에서는 extern int a; 라고 하신 후 a를
사용하시면 됩니다. 간단하게 하려다 보니 제대로 설명이 되었는지 모르겠네요!
1) static 으로 선언하면, 동일 파일내의 함수들에서만 호출가능합니
1) static 으로 선언하면, 동일 파일내의 함수들에서만 호출가능합니다.
-> 해당 변수를 다루는 함수들을 외부에서 호출가능하게 작성하여, 외부 파일에서는 함수로만 해당 변수에 접근가능하게한다.
-> 해당 변수를 static으로 선언하지 않는다. 외부 파일에서 참조할때, extern으로 선언후 사용한다.
2) define문장은 컴파일전 프리프로세싱으로 매크로 확장이 이뤄지므로,
$ cpp 파일명.c
...
해서 해당 부분을 보면 어떻게 확장되는지 알 수 있습니다. cpp는 c++이 아니고, c pre processor입니다.
3) 함수포인터를 주지 않았는데, 사용가능하다? 갸우뚱입니다.
4) #define XX (1 << 8 )
은
#define XX 256
과 동일합니다. 1 << 8 값을 찍어보시고 판단하세요.
5) struct 문장내에서 사용되었다면, 비트필드 선언 입니다.
c언어 기초책에서 비트필드를 찾아보세요.
두 번째 #define 의 인자 chip_add 는 괄호가 붙지 않았고,
두 번째 #define 의 인자 chip_add 는 괄호가 붙지 않았고,
첫 번째 #define 에서 정의된 괄호가 붙어 Macro 함수입니다.
따라서 별개로 인식될 것 같은데요.
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
댓글 달기