C语言你没用过的宏定义和语法

**说明:**之所以整理如下内容,是因为看个别代码时偶尔会遇到,虽不常用,但确实有点烦。

/***************我是转载线************/

参考1:https://www.jianshu.com/p/070a23d1a32d
参考2:https://blog.csdn.net/iteye_5392/article/details/82613715
参考3:http://c.biancheng.net/view/159.html
参考4:http://c.biancheng.net/view/455.html

一、你没用过的宏定义

  1. #line
    编译器会在警告消息、错误消息与调试信息中包含代码所在的行号与所在的源文件名,并提供给调试工具。你可以在源代码中利用 #line 命令改变编译器默认指定的文件名与行号信息。#line 命令的语法如下:
    #line line_number [“filename”]
    例子:#line 1200 "primary.c"
  2. #warning
    警告不会影响程序的正常运行
    例子:#waring "我只是一个人为的警告!"
  3. #error
    程序运行到此抛出错误:
    例子:#error "错误在此,休想编过!"
  4. #pragma
    #pragma 命令是向编译器提供额外信息的标准方法,如果 #pragma 之后的第一个标记(token)是 STDC,那么该命令就是一个标准 pragma。否则,该 #pragma 命令的作用取决于实现版本。为了保障代码的可移植性,应该尽量少使用 #pragma 命令。

如果预处理器支持所指定的标记,就会执行这些标记所代表的动作,或者把该信息传递给编译器。如果预处理器不支持所指定的标记,就忽略该 #pragma 命令。

例如,最新版本的 GNU C 编译器和微软 Visual C 编译器都支持 #pragma pack(n),它使得编译器让结构成员对齐到特定的字节边界。下面的例子使用 pack(1)指示每个结构成员必须对齐到字节边界:

#if defined( __GNUC__ ) || defined( _MSC_VER )
  #pragma pack(1)                             // 对齐字节,没有填充
#endif

二、你没用过的偏门语法

  1. case 可以位于if-else 内部
    在这里插入图片描述
    2)数组名和下标可以互换 , arr[index] 等于 index[arr]
    在这里插入图片描述
  2. 在非常规的位置使用#include
    myHead.txt 中内容:(“I Love you”)
    在这里插入图片描述
    4)%*d 用在scanf 里面可以忽略input
    在这里插入图片描述
    三、你没用过的printf
问题1,输出一个字符串,但最多只输出5 (比如向mysql中插入字符串,显然有个最大长度限制)
问题2,输出一个字符串,但该字符串占100个位置,如果不足,输出空格(即左对齐,右对齐)
问题3,输出一个字符串,只输出其前5个,并且占100个位置

+,-用于对齐,%A.Bs,表示占A格,但输出B个字符。
结合*号,非常强大。%.*s可以实现如下功能:通过外部传入参数限定字节数。

#include <stdio.h>
int main(int argc,char* argv[])
{
 
    printf("%.5s OK\n","HELLO WORLD");
    printf("%-5.2s OK\n","HELLO WORLD");
    printf("%+5.2s OK\n","HELLO WORLD");
    printf("%*s OK\n",5,"HELLO WORLD");
    printf("%-*s OK\n",100,"HELLO WORLD");
    printf("%*s OK\n",100,"HELLO WORLD");
    printf("%+*s OK\n",100,"HELLO WORLD");
return 0;
 
}

运行结果:

[root@localhost wx]# ./a.out 
HELLO OK
HE    OK
   HE OK
HELLO WORLD OK
HELLO WORLD                                                                                    OK
                                                                                   HELLO WORLD OK
                                                                                   HELLO WORLD OK

%x、%X、%#x、%#X 的区别:

# include <stdio.h>
int main(void)
{
    int i = 47;
    printf("%x\n", i);   
    printf("%X\n", i);   
    printf("%#x\n", i);   
    printf("%#X\n", i);   
    return 0;
}

运行结果:

2f
2F
0x2f
0X2F
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值