��ǰλ�ã���ҳ > Ƕ��ʽ��ѵ > Ƕ��ʽѧϰ > ����ָ�� > C���Գ���������

C���Գ��������� ʱ�䣺2019-10-28      ��Դ����ɳ���ģ�����ʦ

Ԥ��������Preprocessor��

1 . ��Ԥ����ָ��#define ����һ�����������Ա���1�����ж����루�����������⣩

         #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL

�������뿴���������飺

1) #define �﷨�Ļ���֪ʶ�����磺�����ԷֺŽ��������ŵ�ʹ�ã��ȵȣ�

2)����Ԥ��������Ϊ����㳣�����ʽ��ֵ����ˣ�ֱ��д��������μ���һ�����ж���������Ǽ����ʵ�ʵ�ֵ���Ǹ�������û�д��۵ġ�

3) ��ʶ��������ʽ��ʹһ��16λ�������������-���Ҫ�õ������ͷ���L,���߱�������������ǵij���������

 

4) ���������ı��ʽ���õ�UL����ʾ�޷��ų����ͣ�����ô������һ���õ���㡣��ס����һӡ�����Ҫ��

2 . дһ��"��׼"��MIN ������������������������ؽ�С��һ����

        #define MIN(A,B) ����A�� <= (B) ? (A) : (B))

���������Ϊ�����Ŀ�Ķ���ģ�

1) ��ʶ#define�ں���Ӧ�õĻ���֪ʶ�����Ǻ���Ҫ�ġ���Ϊ��  Ƕ��(inline)������ ��Ϊ��׼C��һ����֮ǰ�����Ƿ������Ƕ������Ψһ����������Ƕ��ʽϵͳ��˵��Ϊ���ܴﵽҪ������ܣ�Ƕ����뾭���DZ���ķ�����

2) �����ں���С�ĵذѲ���������������

3) ��Ҳ��������⿪ʼ���ۺ�ĸ����ã����磺����д����Ĵ���ʱ�ᷢ��ʲô�£�

        least = MIN(*p++, b);

3. Ԥ��������ʶ#error��Ŀ����ʲô��

����㲻֪���𰸣��뿴�ο�����1�������������һ�������Ļ�ƺ�һ��������Ǻ����õġ�ֻ������ӲŻ��C���Կα��ĸ�¼ȥ�ҳ�����������Ĵ𰸡���Ȼ����㲻������һ������ӣ���ôӦ�������ϣ���Լ���Ҫ֪���𰸡�

 

��ѭ����Infinite loops��

 

4. Ƕ��ʽϵͳ�о���Ҫ�õ�����ѭ��������ô����C��д��ѭ���أ�

��������ü����������������ѡ�ķ����ǣ�

 

while(1)

{

 

}

 

һЩ����Ա��ϲ�����·�����

 

for(;;)

{

 

}

 

���ʵ�ַ�ʽ����Ϊ�ѣ���Ϊ����﷨û��ȷ�б�ﵽ����ô���¡����һ��Ӧ���߸��������Ϊ�������ҽ��������Ϊһ������ȥ̽�������������Ļ���ԭ���������ǵĻ������ǣ�"�ұ�����������������û���뵽��Ϊʲô��"����������һ����ӡ��

 

�������������� goto

Loop:

...

goto Loop;

Ӧ�������������ķ�������˵����������һ��������Գ���Ա����Ҳ���Ǻ��£���������һ��������������BASIC/FORTRAN����Ա��

 

goto Loop �÷���

������c�����в��Ƽ�goto��ʹ�ã������ϳ�����Ƶ�����Ǻǡ�����Ҳ��ѭ����һ�ַ�ʽ

�������£�

#include <stdio.h>

int main(int argc, char *argv[])

{

int i=1;

tt:printf("%d\n",i++);

if (i<10)

goto tt;

return 0;

 

}

����������Data declarations��

 

5. �ñ���a��������Ķ���

a) һ����������An integer��

b)һ��ָ����������ָ�루 A pointer to an integer��

c)һ��ָ��ָ��ĵ�ָ�룬��ָ���ָ����ָ��һ���������� A pointer to a pointer to an intege��r

d)һ����10�������������飨 An array of 10 integers��

e) һ����10��ָ������飬��ָ����ָ��һ���������ġ���An array of 10 pointers to integers��

f) һ��ָ����10�������������ָ�루 A pointer to an array of 10 integers��

g) һ��ָ������ָ�룬�ú�����һ�����Ͳ���������һ����������A pointer to a function that takes an integer as an argument and returns an integer��

h)  һ����10��ָ������飬��ָ��ָ��һ���������ú�����һ�����Ͳ���������һ�������� �� An array of ten pointers to functions that take an integer argument and return an integer ��

 

���ǣ�

a) int a; // An integer

b) int *a; // A pointer to an integer

c) int **a; // A pointer to a pointer to an integer

d) int a[10]; // An array of 10 integers

e) int *a[10]; // An array of 10 pointers to integers

f) int (*a)[10]; // A pointer to an array of 10 integers

g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer

h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

 

const

7���ؼ���const��ʲô���⣿

�� ֻҪһ������������˵��"const��ζ�ų���"���Ҿ�֪�������ں�һ��ҵ���ߴ򽻵���ȥ��Dan Saks�Ѿ���������������ȫ������const������ �÷������ESP(���ߣ�Embedded Systems Programming)��ÿһλ����Ӧ�÷dz���Ϥconst����ʲô�Ͳ�����ʲô.����� ��û�ж�����ƪ���£�ֻҪ��˵��const��ζ��"ֻ��"�Ϳ����ˡ���������𰸲�����ȫ�Ĵ𰸣����ҽ�������Ϊһ����ȷ�Ĵ𰸡����������֪������ϸ�� �𰸣���ϸ��һ��Saks�����°ɡ���

���Ӧ��������ȷ�ش�������⣬�ҽ�����һ�����ӵ����⣺

�������������ʲô��˼��

const int a;

int const a;

const int *a;

int * const a;

int const * a const;

 

/******/

ǰ ������������һ����a��һ��������������������ζ��a��һ��ָ����������ָ�루Ҳ���ǣ��������Dz����޸ĵģ���ָ����ԣ������ĸ���˼a��һ��ָ������ ���ij�ָ�루Ҳ����˵��ָ��ָ�����������5�����޸ĵģ���ָ���Dz����޸ĵģ������һ����ζ��a��һ��ָ���������ij�ָ�루Ҳ����˵��ָ��ָ��������� �Dz����޸ĵģ�ͬʱָ��Ҳ�Dz����޸ĵģ������Ӧ��������ȷ�ش���Щ���⣬��ô���͸���������һ����ӡ��˳����һ�䣬Ҳ������ܻ��ʣ���ʹ���ùؼ���  const��Ҳ�����ܺ�����д��������ȷ�ij�����ô��Ϊʲô��Ҫ��˿��عؼ���const�أ���Ҳ���µļ������ɣ�

1) �ؼ���const�� ������Ϊ�����������˴���dz����õ���Ϣ��ʵ���ϣ�����һ������Ϊ������Ϊ�˸������û����������Ӧ��Ŀ�ġ�����������ܶ�ʱ���������������µ������� ��ͻ�ܿ�ѧ���л���������Ϣ������Ȼ��������const�ij���Ա���ٻ����µ������ñ���������ġ���

2) ͨ�����Ż���һЩ���ӵ���Ϣ��ʹ�ùؼ���constҲ���ܲ�������յĴ��롣

3) �����ʹ�ùؼ���const����ʹ����������Ȼ�ر�����Щ��ϣ�����ı�IJ�������ֹ�䱻����Ĵ����޸ġ������֮���������Լ���bug�ij��֡�

 

Volatile

 

8. �ؼ���volatile��ʲô����?������������ͬ�����ӡ�

һ������Ϊvolatile�ı�����˵��������ܻᱻ���벻���ظı䣬�������������Ͳ���ȥ�������������ֵ�ˡ���ȷ��˵���ǣ��Ż������õ��������ʱ����ÿ�ζ�С�ĵ����¶�ȡ���������ֵ��������ʹ�ñ����ڼĴ�����ı��ݡ�������volatile�����ļ������ӣ�

1) �����豸��Ӳ���Ĵ������磺״̬�Ĵ�����

2) һ���жϷ����ӳ����л���ʵ��ķ��Զ�����(Non-automatic variables)

3) ���߳�Ӧ���б�����������ı���

 

�ش𲻳������������Dz��ᱻ��Ӷ�ġ�����Ϊ��������C����Ա��Ƕ��ʽϵͳ����Ա������������⡣��Ƕ��ʽ�ļһ��Ǿ���ͬӲ�����жϡ�RTOS�ȵȴ򽻵���������Щ��Ҫ���õ�volatile������������volatile�����ݽ���������ѡ�

���豻��������ȷ�ػش����������⣨�ţ������Ƿ�������������ҽ���΢�һ�£���һ����һ��Dz���ֱ������volatile��ȫ����Ҫ�ԡ�

1)һ�������ȿ�����const��������volatile�𣿽���Ϊʲô��

2); һ��ָ�������volatile �𣿽���Ϊʲô��

3); ����ĺ�����ʲô����

 

int square(volatile int *ptr)

{

        return *ptr * *ptr;

}

 

�����Ǵ𰸣�

1)�ǵġ�һ��������ֻ����״̬�Ĵ���������volatile��Ϊ�����ܱ����벻���ظı䡣����const��Ϊ����Ӧ����ͼȥ�޸�����

2); �ǵġ������Ⲣ���ܳ�����һ�������ǵ�һ���з����ӳ����޸�һ��ָ��һ��buffer��ָ��ʱ��

 

3) ��δ����е��̬����δ����Ŀ����������ָ��*ptrָ��ֵ��ƽ�������ǣ�����*ptrָ��һ��volatile�Ͳ�������������������������Ĵ��룺

int square(volatile int *ptr)

{

    int a,b;

    a = *ptr;

    b = *ptr;

    return a * b;

 

}

����*ptr��ֵ���ܱ����벻���ظñ䣬���a��b�����Dz�ͬ�ġ��������δ�����ܷ���������������ƽ��ֵ����ȷ�Ĵ������£�

 

long square(volatile int *ptr)

{

    int a;

    a = *ptr;

    return a * a;

}

�����Bit manipulation��

 

9. Ƕ��ʽϵͳ����Ҫ�û��Ա�����Ĵ�������λ����������һ�����ͱ���a��д���δ��룬��һ������a��bit 3���ڶ������a ��bit 3�����������������У�Ҫ��������λ���䡣

��������������ֻ����ķ�Ӧ

1)��֪��������֡��ñ����ߴ�û�����κ�Ƕ��ʽϵͳ�Ĺ�����

2)  ��bit fields��Bit fields�DZ��ӵ�C�������ǵĶ���������֤��Ĵ����ڲ�ͬ������֮���Dz�����ֲ�ģ�ͬʱҲ��֤�˵���Ĵ����Dz��� ���õġ���������ҿ��� InfineonΪ��ϸ��ӵ�ͨ��оƬд�������������õ���bit fields�����ȫ�������ã���Ϊ�ҵı������������ķ� ʽ��ʵ��bit fields�ġ��ӵ��½�����Զ��Ҫ��һ����Ƕ��ʽ�ļһ�ճʵ��Ӳ���ıߡ�

3) �� #defines �� bit masks ����������һ���м��߿���ֲ�Եķ�������Ӧ�ñ��õ��ķ�������ѵĽ���������£�

 

#define BIT3 (0x1 << 3)

static int a;

 

void set_bit3(void)

{

    a |= BIT3;

}

void clear_bit3(void)

{

    a &= ~BIT3;

}

 

 

һЩ��ϲ��Ϊ���ú����ֵ������һ������ͬʱ����һЩ˵����������Ҳ�ǿ��Խ��ܵġ���ϣ����������Ҫ�㣺˵��������|=��&=~������

���ʹ̶����ڴ�λ�ã�Accessing fixed memory locations��

 

10. Ƕ��ʽϵͳ��������Ҫ�����Աȥ����ij�ض����ڴ�λ�õ��ص㡣��ij�����У�Ҫ������һ���Ե�ַΪ0x67a9�����ͱ�����ֵΪ0xaa66����������һ�������ANSI��������д����ȥ�����һ����

��һ����������Ƿ�֪��Ϊ�˷���һ���Ե�ַ��һ��������ǿ��ת����typecast��Ϊһָ���ǺϷ��ġ���һ�����ʵ�ַ�ʽ���Ÿ��˷��ͬ����ͬ�����͵����ƴ������£�

    int *ptr;

    ptr = (int *)0x67a9;

    *ptr = 0xaa55;

 

 A more obscure approach is:

һ���ϻ�ɬ�ķ����ǣ�

 

    *(int * const)(0x67a9) = 0xaa55;

 

 

��ʹ���Ʒζ���ӽ��ڶ��ַ��������ҽ�����������ʱʹ�õ�һ�ַ�����

�жϣ�Interrupts��

 

11.  �ж���Ƕ��ʽϵͳ����Ҫ����ɲ��֣��⵼���˺ܶ���뿪�����ṩһ����չ—�ñ�׼C֧���жϡ��ߴ�����ʵ�ǣ�������һ���µĹؼ���  __interrupt������Ĵ����ʹ����__interrupt�ؼ���ȥ������һ���жϷ����ӳ���(ISR)��������һ����δ���ġ�

 

__interrupt double compute_area (double radius)

{

    double area = PI * radius * radius;

    printf("\nArea = %f", area);

    return area;

}

 

���������̫��Ĵ����ˣ��������˲�֪�Ӻ�˵���ˣ�

1)ISR ���ܷ���һ��ֵ������㲻���������ô�㲻�ᱻ���õġ�

2) ISR ���ܴ��ݲ����������û�п�����һ�㣬�㱻���õĻ����ͬ��һ�

3) �����Ĵ�����/�������У�����һ�㶼�Dz�������ġ���Щ������/��������Ҫ�ö�ļĴ�����ջ����Щ������/���������Dz�������ISR�����������㡣���⣬ISRӦ���Ƕ̶���Ч�ʵģ���ISR�������������Dz����ǵġ�

 

4) �������һ����У�printf()����������������ϵ����⡣����㶪���˵����͵��ĵ㣬�Ҳ���̫Ϊ����ġ�����˵��������ܵõ������㣬��ô��ı�����ǰ��Խ��Խ�����ˡ�

�������ӣ�Code examples��

 

12 . ����Ĵ��������ʲô��Ϊʲô��

 

void foo(void)

{

    unsigned int a = 6;

    int b = -20;

    (a+b > 6) ? puts("> 6") : puts("<= 6");

}

 

�� ������������Ƿ񶮵�C�����е������Զ�ת��ԭ���ҷ�����Щ�����߶��ü�����Щ������������Σ����޷�����������Ĵ�������� ">6"��ԭ�� �ǵ����ʽ�д����з������ͺ��޷�������ʱ���еIJ��������Զ�ת��Ϊ�޷������͡����-20�����һ���dz���������������Ըñ��ʽ������Ľ������6�� ��һ�����Ӧ��Ƶ���õ��޷����������͵�Ƕ��ʽϵͳ��˵�Ƿ᳣��Ҫ�ġ����������������⣬��Ҳ�͵��˵ò�����ݹ����ı�Ե��

13. ��������Ĵ���Ƭ�ϣ�

 

unsigned int zero = 0;

unsigned int compzero = 0xFFFF;

/*1's complement of zero */

 

����һ��int�Ͳ���16λ�Ĵ�����Ϊ˵������Ĵ����Dz���ȷ�ġ�Ӧ��д���£�

 

unsigned int compzero = ~0;

 

��һ���������ܽ�¶��Ӧ�����Ƿ񶮵ô������ֳ�����Ҫ�ԡ����ҵľ�����õ�Ƕ��ʽ����Ա�dz�׼ȷ������Ӳ����ϸ�ں����ľ��ޣ�Ȼ��PC������������Ӳ����Ϊһ���޷�����ķ��ա�

 

�� ������׶Σ�Ӧ���߻�����ȫ��ͷɥ���˻�����������־�ڱصá������ȻӦ���߲��Ǻܺã���ô������Ծ�����������ˡ��������ȻӦ�������ò������ô�Ҿ� �ӳ������׷�����⣬��Щ�����DZȽ��ѵģ���������dz������Ӧ���������ò���������Щ���⣬��ϣ�����࿴��Ӧ����Ӧ������ķ����������Ǵ𰸡������� �Σ���͵���������ְ�...

��̬�ڴ���䣨Dynamic memory allocation��

 

14. ���ܲ����Ƕ��ʽ�������ô������Ƕ��ʽϵͳ�����дӶѣ�heap���ж�̬�����ڴ�Ĺ��̵ġ���ôǶ��ʽϵͳ�У���̬�����ڴ���ܷ�����������ʲô��

�� �������Ӧ�������ᵽ�ڴ���Ƭ����Ƭ�ռ������⣬�����ij���ʱ��ȵȡ���������Ѿ���ESP��־�б��㷺�����۹��ˣ���Ҫ��  P.J. Plauger, ���Ľ���ԶԶ�������������ᵽ���κν��ͣ������лع�ͷ��һ����Щ��־�ɣ���Ӧ���߽���һ����ٵİ�ȫ�о������ó���ô һ��С��Ŀ��

����Ĵ���Ƭ�ε������ʲô��Ϊʲô��

 

char *ptr;

if ((ptr = (char *)malloc(0)) == NULL)

    puts("Got a null pointer");

else

    puts("Got a valid pointer");

 

 

�� ��һ����Ȥ�����⡣������ҵ�һ��ͬ�²������0ֵ�����˺���malloc���õ���һ���Ϸ���ָ��֮���Ҳ��뵽������⡣���������Ĵ��룬�ô������ ����"Got a valid pointer"�������������ʼ����������һ���⣬�������������Ƿ��뵽����������������ȷ���õ���ȷ�Ĵ𰸹�Ȼ��Ҫ�� ���������ķ��������������Ļ���ԭ�����ҪЩ��

15 Typedef ��C������Ƶ����������һ���Ѿ����ڵ��������͵�ͬ���֡�Ҳ������Ԥ�����������Ƶ��¡����磬˼��һ����������ӣ�

 

#define dPS struct s *

typedef struct s * tPS;

 

���������������ͼ����Ҫ����dPS �� tPS ��Ϊһ��ָ��ṹsָ�롣���ַ��������أ�������еĻ���Ϊʲô��

����һ���dz�΢������⣬�κ��˴��������⣨������ԭ����Ӧ������ϲ�ġ����ǣ�typedef���á�˼����������ӣ�

 

dPS p1,p2;

tPS p3,p4;

 

��һ����չΪ

 

struct s * p1, p2;

.

����Ĵ��붨��p1Ϊһ��ָ��ṹ��ָ��p2Ϊһ��ʵ�ʵĽṹ����Ҳ���������Ҫ�ġ��ڶ���������ȷ�ض�����p3 ��p4 ����ָ�롣

 

 

 

��ɬ���﷨

 

16 . C����ͬ��һЩ�����𾪵Ľṹ,����Ľṹ�ǺϷ��������������Щʲô��

 

int a = 5, b = 7, c;

c = a+++b;

 

������⽫��Ϊ��������һ�����Ľ�β���������಻���ţ��������������ȫ�Ϻ��﷨�ġ������DZ�������δ�������ˮƽ���ߵı�������ʵ���ϻ�����������⣬�������ԭ�򣬱�����Ӧ���ܴ�����������кϷ����÷�����ˣ�����Ĵ��뱻����ɣ�

 

c = a++ + b;

 

���, ��δ�����к�a = 6, b = 7, c = 12��

�����֪���𰸣���³���ȷ�𰸣����úá�����㲻֪���𰸣���Ҳ��������������⡣�ҷ��������������ô�������һ�����ڴ����д��񣬴���Ŀɶ��ԣ�����Ŀ��޸��ԵĺõĻ��⡣

 

 

 

#error���ǹ�������һЩ����,��ֹ�Լ������˻����Ǹ�����ʹ��,���˸����ú�һ�������ֵ,����#error������,���Ƕ�ô�ſ�ı��뼼��,���������ë�߹�ϵ��!!!!!!!!!!

��һƪ��STM32��ʲô������

��һƪ��STM32�����51���һ����?

�ȵ������Ƽ�
����ѧԱ��ҵ��
��нѧԱ�������
�ȵ������Ƽ�
ǰ̨ר�ߣ�010-82525158 ��ҵ��ѵǢ̸ר�ߣ�010-82525379 ԺУ����Ǣ̸ר�ߣ�010-82525379 Copyright © 2004-2018 ��������Զ���Ƽ���չ���޹�˾ ��Ȩ���� ����ICP��16055225�ţ�������������11010802025203��

�ص�����