码迷,mamicode.com
首页 > 其他好文 > 详细

C预处理和C库

时间:2016-01-24 11:35:25      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

1 #include <stdio.h>
2 #define MAN(x) "n"##x
3 int main(void)
4 {
5     printf("%s",MAN("dd"));
6     return 0;
7 }

这里我说一下,几个我曾犯的错误,首先,将#define错写成了#include

报错error C2006: #include expected a filename, found ‘identifier‘

当我搜索时发现了这么别人问的一个问题

#include "asclass.h"
//asclass.h有语句#define ASData_i "asdata.h"
#include  ASData_i

这样编译,报错:error C2006: #include expected a filename, found ‘identifier‘

怎么处理?

因为#define 和#include都是预处理。所以不会在#include处发生替换,所以编译器误认为你在添加头文件

还有,当你在处理替换字的类型时要注意,就像上面的"n"##x,如果你去掉“”,那么他就会将n当成是个变量

指令             用途

         #            空指令,无任何效果

         #include    包含一个源代码文件

         #define     定义宏

         #undef     取消已定义的宏

         #if          如果给定条件为真,则编译下面代码

         #ifdef       如果宏已经定义,则编译下面代码

         #ifndef     如果宏没有定义,则编译下面代码

         #elif         如果前面的#if给定条件不为真,当前条件为真,则编译下面代码

         #endif      结束一个#if……#else条件编译块

         #error      停止编译并显示错误信息

    #else       略

    #error     指令将使编译器显示一条错误信息,然后停止编译。

         #line        指令可以改变编译器用来指出警告和错误信息的文件号和行号。
         #pragma  指令没有正式的定义。编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息。

#pragma message(“消息文本”)

  当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。

 

条件预处理

    #if defined x
等于
    #ifdef x

    #if !defined x
等于
    #ifndef x

更详细的可以看http://www.cnblogs.com/mmfzmd517528/archive/2013/01/23/2872423.html

 

unknown character ‘0xa1‘可能是在复制粘贴时,全角半角的错误

atexit()

#include<stdlib.h>
     int atexit(void(*func)(void));
 
    其中,atexit的参数是一个函数地址,当调用此函数时无须传递任何参数,该函数也不能返回值,atexit函数称为终止处理程序注册程序,注册完成以后,当函数终止是exit()函数会主动的调用前面注册的各个函数,但是exit函数调用这些函数的顺序于这些函数登记的顺序是相反的
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 void func1(void)
 5 {
 6         printf("in func1\n");
 7 }
 8 
 9 void func2(void)
10 {
11         printf("in func2\n");
12 }
13 
14 void func3(void)
15 {
16         printf("in func3\n");
17 }
18 
19 int main()
20 {
21         atexit(func3);
22         atexit(func2);
23         atexit(func1);
24 
25         printf("In main\n");
26 
27         return 0;
28 }
结果是
  1. In main
  2. in func1
  3. in func2
  4. in func3

C预处理和C库

标签:

原文地址:http://www.cnblogs.com/dream-for/p/5154761.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!