What does an empty # mean in a macro definition?
I have the following macro:
#define F(Args, ...)
// macro definition
#
F(()) // looks like usage?
#undef F
What does the line containing only #
mean? Is F(())
a usage of the macro?
c++ c macros
add a comment |
I have the following macro:
#define F(Args, ...)
// macro definition
#
F(()) // looks like usage?
#undef F
What does the line containing only #
mean? Is F(())
a usage of the macro?
c++ c macros
add a comment |
I have the following macro:
#define F(Args, ...)
// macro definition
#
F(()) // looks like usage?
#undef F
What does the line containing only #
mean? Is F(())
a usage of the macro?
c++ c macros
I have the following macro:
#define F(Args, ...)
// macro definition
#
F(()) // looks like usage?
#undef F
What does the line containing only #
mean? Is F(())
a usage of the macro?
c++ c macros
c++ c macros
edited Feb 2 at 14:02
Boann
37.3k1290121
37.3k1290121
asked Feb 2 at 10:03
embedcembedc
35910
35910
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Technically, that's not part of the macro (no continuation line before it).
It's a directive that comes after the #define
directive.
#
on its own line is called a null directive and it does nothing (as good as a comment).
It's no longer practically useful (except as a visual marker) but in prehistoric C, the preprocessor only got invoked if a C source file started with a directive and the null directive placed at the very beginning of a C file was a good way to make sure the file was preprocessed (i.e., that later directives worked) without starting with a concrete directive.
I suppose it can be used to obfuscade code even further
– Stack Danny
Feb 2 at 12:01
@StackDanny Yeah, it could be seen as unnecessarily obfuscating.
– PSkocik
Feb 2 at 12:08
2
I knew that preprocessing was not always an automatic part of C compilation, but I didn't know that this was how the preprocessor was engaged. Nice.
– John Bollinger
Feb 2 at 14:54
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54491941%2fwhat-does-an-empty-mean-in-a-macro-definition%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Technically, that's not part of the macro (no continuation line before it).
It's a directive that comes after the #define
directive.
#
on its own line is called a null directive and it does nothing (as good as a comment).
It's no longer practically useful (except as a visual marker) but in prehistoric C, the preprocessor only got invoked if a C source file started with a directive and the null directive placed at the very beginning of a C file was a good way to make sure the file was preprocessed (i.e., that later directives worked) without starting with a concrete directive.
I suppose it can be used to obfuscade code even further
– Stack Danny
Feb 2 at 12:01
@StackDanny Yeah, it could be seen as unnecessarily obfuscating.
– PSkocik
Feb 2 at 12:08
2
I knew that preprocessing was not always an automatic part of C compilation, but I didn't know that this was how the preprocessor was engaged. Nice.
– John Bollinger
Feb 2 at 14:54
add a comment |
Technically, that's not part of the macro (no continuation line before it).
It's a directive that comes after the #define
directive.
#
on its own line is called a null directive and it does nothing (as good as a comment).
It's no longer practically useful (except as a visual marker) but in prehistoric C, the preprocessor only got invoked if a C source file started with a directive and the null directive placed at the very beginning of a C file was a good way to make sure the file was preprocessed (i.e., that later directives worked) without starting with a concrete directive.
I suppose it can be used to obfuscade code even further
– Stack Danny
Feb 2 at 12:01
@StackDanny Yeah, it could be seen as unnecessarily obfuscating.
– PSkocik
Feb 2 at 12:08
2
I knew that preprocessing was not always an automatic part of C compilation, but I didn't know that this was how the preprocessor was engaged. Nice.
– John Bollinger
Feb 2 at 14:54
add a comment |
Technically, that's not part of the macro (no continuation line before it).
It's a directive that comes after the #define
directive.
#
on its own line is called a null directive and it does nothing (as good as a comment).
It's no longer practically useful (except as a visual marker) but in prehistoric C, the preprocessor only got invoked if a C source file started with a directive and the null directive placed at the very beginning of a C file was a good way to make sure the file was preprocessed (i.e., that later directives worked) without starting with a concrete directive.
Technically, that's not part of the macro (no continuation line before it).
It's a directive that comes after the #define
directive.
#
on its own line is called a null directive and it does nothing (as good as a comment).
It's no longer practically useful (except as a visual marker) but in prehistoric C, the preprocessor only got invoked if a C source file started with a directive and the null directive placed at the very beginning of a C file was a good way to make sure the file was preprocessed (i.e., that later directives worked) without starting with a concrete directive.
edited Feb 2 at 10:22
answered Feb 2 at 10:10
PSkocikPSkocik
34.5k65578
34.5k65578
I suppose it can be used to obfuscade code even further
– Stack Danny
Feb 2 at 12:01
@StackDanny Yeah, it could be seen as unnecessarily obfuscating.
– PSkocik
Feb 2 at 12:08
2
I knew that preprocessing was not always an automatic part of C compilation, but I didn't know that this was how the preprocessor was engaged. Nice.
– John Bollinger
Feb 2 at 14:54
add a comment |
I suppose it can be used to obfuscade code even further
– Stack Danny
Feb 2 at 12:01
@StackDanny Yeah, it could be seen as unnecessarily obfuscating.
– PSkocik
Feb 2 at 12:08
2
I knew that preprocessing was not always an automatic part of C compilation, but I didn't know that this was how the preprocessor was engaged. Nice.
– John Bollinger
Feb 2 at 14:54
I suppose it can be used to obfuscade code even further
– Stack Danny
Feb 2 at 12:01
I suppose it can be used to obfuscade code even further
– Stack Danny
Feb 2 at 12:01
@StackDanny Yeah, it could be seen as unnecessarily obfuscating.
– PSkocik
Feb 2 at 12:08
@StackDanny Yeah, it could be seen as unnecessarily obfuscating.
– PSkocik
Feb 2 at 12:08
2
2
I knew that preprocessing was not always an automatic part of C compilation, but I didn't know that this was how the preprocessor was engaged. Nice.
– John Bollinger
Feb 2 at 14:54
I knew that preprocessing was not always an automatic part of C compilation, but I didn't know that this was how the preprocessor was engaged. Nice.
– John Bollinger
Feb 2 at 14:54
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54491941%2fwhat-does-an-empty-mean-in-a-macro-definition%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown