C预处理和C库

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
时间: 2024-10-20 15:21:39

C预处理和C库的相关文章

css预处理和bootstrap

css预处理框架的比较 http://www.oschina.net/question/12_44255?sort=default&p=4 bootstrap中文网 http://v3.bootcss.com/ lesscss网站 http://lesscss.org/

C Primer Plus (第五版) 第十六章 C预处理器和C库 编程练习

第十六章 C预处理器和C库 开发一个包含您需要使用的预处理器定义的头文件 //max.h  #ifndef _MAX_H_     #define _MAX_H_     #define MAX(X, Y) ((X)>(Y)?(X):(Y)) #endif 2.两个数的调和平均数可用如下方法得到:首先对两数的倒数取平均值,最后再取倒数.使用#define指令定义一个宏"函数"执行这个运算.编写一个简单的程序测试该宏. #include <stdio.h> #defin

《C Primer Plus》学习笔记——C预处理器和C库

1.在Unix系统中,尖括号告诉预处理器在一个或多个标准系统目录中寻找文件.双引号告诉预处理器先在当前目录(或文件名中指定的其他目录)中寻找文件,然后在标准位置寻找文件. 2.#undef指令:取消定义一个给定的#define #define LIMIT 400 #undef LIMIT 3.条件编译 #ifdef.#else和#endif指令 #ifdef 宏名 //语句段1 #else //语句段2 #endif 作用:当标识符已经被定义过(一般是用#define命令定义),则对语句段1进行

[Python]网络爬虫(三):异常的处理和HTTP状态码的分类(转)

先来说一说HTTP的异常处理问题.当urlopen不能够处理一个response时,产生urlError.不过通常的Python APIs异常如ValueError,TypeError等也会同时产生.HTTPError是urlError的子类,通常在特定HTTP URLs中产生. 1.URLError通常,URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生. 这种情况下,异常同样会带有"reason"属性,它是一个tuple(可以理解为不可变的数组),

(转)预处器的对比——Sass、LESS和Stylus

英文原文:http://net.tutsplus.com/tutorials/html-css-techniques/sass-vs-less-vs-stylus-a-preprocessor-shootout 原文链接:http://www.w3cplus.com/css/sass-vs-less-vs-stylus-a-preprocessor-shootout.html 介绍 CSS预处理器是一种语言,用来编写一些CSS的特性,而且无需考虑浏览器兼容性的问题.他们通过编译的代码编写成一般的

CSS预处器的对比——Sass、Less和Stylus

预处器的对比--Sass.LESS和Stylus 转载: 英文原文:http://net.tutsplus.com/tutorials/html-css-techniques/sass-vs-less-vs-stylus-a-preprocessor-shootout 中文译文:http://www.w3cplus.com/css/sass-vs-less-vs-stylus-a-preprocessor-shootout.html 作者:大漠 日期:2013-01-26 点击:5177 Sas

预处器的对比——Sass、LESS.

发挥CSS预处器的作用是一种很有挑战性的事情.CSS预处器有不同的语言,有不同的语法和功能. 不同CSS预处器的蛮量.功能以及他们的好处——Sass.LESS 介绍 CSS预处理器是一种语言,用来编写一些CSS的特性,而且无需考虑浏览器兼容性的问题.他们通过编译的代码编写成一般的CSS,不要在停留在石器时代了. Sass和LESS Sass和LESS都使用的是标准的CSS语法.这使用CSS预处器非常容易的将预处器代码转换成CSS代码.默认Sass使用“.scss”扩展名,而LESS使用“.les

C Primer Plus之C预处理器和C库

编译程序前,先由预处理器检查程序(因此称为预处理器).根据程序中使用的预处理器指令,预处理器用符号缩略语所代表的内容替换程序中的缩略语. 预处理器不能理解C,它一般是接受一些文件并将其转换成其他文本. 翻译程序的第一步 对程序作预处理前,编译器会对它进行几次翻译处理. 编译器首先把源代码中出现的字符映射到源字符集(?).该过程处理多字节字符和使C外观更加国际化的三元字符(?)扩展 编译器查找反斜线(\)后紧跟换行符的实例并删除这些实例.注意:在这种场合下,“换行符”代表按下回车键在源代码文件中新

C预处理器和C库

#define #include #undef #ifdef #else #endif #if #elif #else #endif 预处理宏: p463 _ _fun_ _是预定义标识符(函数作用域),不是宏(文件作用域) #line --重置_ _LINE_ _和_ _FILE_ _宏报告的行号和文件名 #error #pragma --将编译器指令置于源代码中 内联函数 inline --减少执行的时间 函数库 .数学库 略... exit() atexit() exit()执行了atex