UltiSnips has the extends
keyword. You pass a comma separated list of filetypes to it and it will load the snippets for those filetypes before the snippets in the file the keyword is used in.
Example:
extends c, obj-c
This way you can have a "cpp.snippets" file which "extends" your c filetype and obj-c type. The documentation doesn't mention cyclic extending but it will probably get in a loop and break something so don't do that. I'm pretty sure you can use a fake filetype so you can do something like this:
- create a snippet file called "cgeneral.snippets" which shouldn't get loaded by UltiSnips automatically
- create your "c.snippets" file
- add "extend cgeneral" at the top (can actually be anywhere in the file)
- repeat for "cpp.snippets"
Now you can have all general stuff in "cgeneral" and import that into your c.snippets file and your cpp one, too.