[C语言] 预处理
Posted 咸菜萝卜干
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C语言] 预处理相关的知识,希望对你有一定的参考价值。
预处理
定义宏
--定义宏要套两层括号 ((x)+(x))
--#
int main()
{
printf("%d\\n",SQUARE(3)); //3*3
printf("%d\\n",SQUARE(3+1)); // 3+1*3+1
int a = 10;
PRINT(a);
//printf("the value of "a" is %d\\n",X); 三段字符拼成一段
int b = 20;
PRINT(b);
int c = 30;
PRINT(c);
int yyds666 = 10;
printf("%d",CAT(yyds,666)); //字符串拼接
return 0;
}
宏的副作用
int main()
{
int a = 5;
int b = 8;
int m = MAX(a++,b++);
printf("a = %d b = %d\\n",a,b); // a =6 b = 10
printf("m = %d\\n",m); // m = 9
return 0;
}
取消定义
atoi
enum State
{
INVALID,
VALID
};
enum State state = INVALID;
int my_atoi(const char* s)
{
int flag = 1;
//空指针
if (NULL == s)
{
return 0;
}
//空字符
if (*s == \\0)
{
return 0;
}
//跳过空白字符
while (isspace(*s))
{
s++;
}
//+ / -
if (*s == +)
{
flag = 1;
s++;
}
else if (*s == -)
{
flag = -1;
s++;
}
//处理数字字符的转换
long long n = 0;
while (isdigit(*s))
{
n = n * 10 + flag * (*s - 0);
if (n > INT_MAX || n < INT_MIN)
{
return 0;
}
s++;
}
if (*s == \\0)
{
state = VALID;
return (int)n;
}
else
{
//非数字字符的情况
return (int)n;
}
}
int main()
{
const char* p = " -1234";
int ret = my_atoi(p);
if(state == VALID)
printf("合法的转换:%d\\n",ret);
else
printf("不合法的转换:%d\\n", ret);
return 0;
}
以上是关于[C语言] 预处理的主要内容,如果未能解决你的问题,请参考以下文章
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段