A C Programming Language Puzzle

原文網址,本文不是完全翻譯,而是自己吸收過後,在寫下此筆記

Problem

有一變數a=12,b=36,請寫出一個c function/macro,回傳3612且不使用算數運算和字串處理的函式.

Token-Pasting Operator

當擴展## macro時,##會將左右兩邊的符號(token),合併為一個符號(token).

#include <stdio.h>
#define merge(a, b) a##b
int main()
{
    int a = 12;
    int b = 36;
    printf("%d ", merge(a, b));
}
// Output: 1234

Solution

有了Token-Pasting Operator,應該不難想出此題的解答

#include <stdio.h>
#define merge(a, b) b##a
int main()
{
    int a = 12;
    int b = 36;
    printf("%d ", merge(a, b));
}
// Output: 3612

Reference

  1. https://gcc.gnu.org/onlinedocs/cpp/Concatenation.html#Concatenation
  2. https://msdn.microsoft.com/en-us/library/09dwwt6y.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值