获取宏参数的最后一个char

时间:2016-07-16 22:23:44

标签: c++ macros

让我说我有这个宏

#define last(x) printf("%c", #x[last]);

我希望它打印x的最后一个字符,其中x不是字符串。

如何获取x的最后一个字符?有一个简短的方法吗?

int main(){
    last(abc);
}

output: c

2 个答案:

答案 0 :(得分:4)

当我们记住字符串文字只是我们可以索引的数组时,很容易做到:

#define last(x) std::printf("%c", #x[sizeof(#x) - 2]);

Live

答案 1 :(得分:3)

你想要

#define last(x) printf("%c", #x[sizeof(#x)-2]);

演示:https://ideone.com/rp0w8k

sizeof为您提供通过字符串化宏参数形成的字符串文字中的字节数,返回一个以获得终止零,返回另一个以获取最后一个字符。)

我真的希望这是有兴趣的,但你并不打算在实际代码中使用它。