Bird
Raised Fist0
Cprogramming~10 mins

Predefined macros - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Predefined macros
Start Compilation
↓
Compiler Inserts Predefined Macros
↓
Code Uses Macros like __FILE__, __LINE__
↓
Macros Expand to Values
↓
Compilation Continues with Expanded Code
↓
Program Runs with Macro Values Embedded
During compilation, the compiler automatically inserts predefined macros with specific values, which the code can use and expand before running.
Execution Sample
C
#include <stdio.h>

int main() {
    printf("File: %s\n", __FILE__);
    printf("Line: %d\n", __LINE__);
    return 0;
}
This code prints the current file name and the line number where the macros are used.
Execution Table
StepCode LineMacro UsedMacro ExpansionOutput Produced
1printf("File: %s\n", __FILE__);__FILE__"example.c"File: example.c
2printf("Line: %d\n", __LINE__);__LINE__6Line: 6
3return 0;NoneNoneProgram ends
💡 All macros expanded by compiler, program outputs file name and line number, then ends.
Variable Tracker
VariableStartAfter Step 1After Step 2Final
__FILE__Not set"example.c""example.c""example.c"
__LINE__Not setNot set66
Key Moments - 2 Insights
Why does __LINE__ print 5 instead of the line where the program runs?
Because __LINE__ expands to the line number in the source code where it appears, not the runtime line. See execution_table row 2.
Is __FILE__ a string or a number?
__FILE__ expands to a string literal with the current file name, as shown in execution_table row 1.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what value does __FILE__ expand to at step 1?
A7
B"main.c"
C"example.c"
DUndefined
💡 Hint
Check the 'Macro Expansion' column in execution_table row 1.
At which step does __LINE__ get expanded?
AStep 1
BStep 2
CStep 3
DNever
💡 Hint
Look at the 'Macro Used' column in execution_table to find when __LINE__ is used.
If you add a new line before printf(__LINE__), what happens to the output?
AThe printed line number increases by 1
BThe printed line number stays the same
CThe program crashes
DThe file name changes
💡 Hint
Refer to variable_tracker for __LINE__ changes when code lines change.
Concept Snapshot
Predefined macros are special names the compiler replaces with info during compilation.
Common macros:
- __FILE__: current file name as string
- __LINE__: current line number as int
They help track code location without manual input.
Used inside code, expanded before running.
Full Transcript
Predefined macros in C are special names that the compiler automatically replaces with useful information during compilation. For example, __FILE__ becomes the current file name as a string, and __LINE__ becomes the line number in the source code where it appears. In the example code, when printf uses __FILE__, it prints the file name, and when it uses __LINE__, it prints the line number. These macros are expanded before the program runs, so the output shows the actual file name and line number. If you add or remove lines before the macro, the line number changes accordingly. This helps programmers know exactly where in the code something happens without typing it manually.

Practice

(1/5)
1. Which of the following predefined macros in C gives the current line number in the source code?
easy
A. __LINE__
B. __FILE__
C. __DATE__
D. __TIME__

Solution

  1. Step 1: Understand predefined macros purpose

    Predefined macros provide info about the code or environment automatically.
  2. Step 2: Identify macro for line number

    __LINE__ gives the current line number in the source file.
  3. Final Answer:

    __LINE__ -> Option A
  4. Quick Check:

    Line number macro = __LINE__ [OK]
Hint: Line number macro always has LINE in its name [OK]
Common Mistakes:
  • Confusing __FILE__ with line number
  • Using __DATE__ or __TIME__ for line info
  • Thinking __LINE__ is a function
2. Which of the following is the correct syntax to print the current file name using a predefined macro in C?
easy
A. printf("File: %s", FILE);
B. printf("File: %s", __FILE__);
C. printf("File: %s", _FILE_);
D. printf("File: %s", file);

Solution

  1. Step 1: Recall predefined macro for file name

    The macro __FILE__ holds the current source file name as a string.
  2. Step 2: Check correct syntax usage

    Using printf("File: %s", __FILE__); correctly prints the file name.
  3. Final Answer:

    printf("File: %s", __FILE__); -> Option B
  4. Quick Check:

    File name macro syntax = __FILE__ [OK]
Hint: Predefined macros always have double underscores before and after [OK]
Common Mistakes:
  • Omitting underscores in __FILE__
  • Using FILE without underscores
  • Using lowercase file instead of macro
3. What will be the output of the following C code snippet?
#include <stdio.h>
int main() {
    printf("Date: %s\n", __DATE__);
    printf("Time: %s\n", __TIME__);
    return 0;
}
medium
A. Compilation error due to undefined macros
B. Date: __DATE__\nTime: __TIME__
C. Date: current date at compilation\nTime: current time at compilation
D. Date: 0000-00-00\nTime: 00:00:00

Solution

  1. Step 1: Understand __DATE__ and __TIME__ macros

    These macros expand to strings representing the date and time when the code was compiled.
  2. Step 2: Predict output of printf statements

    The program prints the compilation date and time as strings, not the macro names or errors.
  3. Final Answer:

    Date: current date at compilation\nTime: current time at compilation -> Option C
  4. Quick Check:

    __DATE__ and __TIME__ show compile date/time [OK]
Hint: __DATE__ and __TIME__ show compile time info as strings [OK]
Common Mistakes:
  • Expecting runtime current date/time
  • Thinking macros print their own names
  • Assuming macros are undefined
4. Consider this C code snippet:
#include <stdio.h>
int main() {
    printf("Line: %d\n", LINE);
    return 0;
}

What is the problem with this code?
medium
A. LINE is not a predefined macro; it should be __LINE__
B. Missing semicolon after printf
C. printf format specifier %d is incorrect for LINE
D. No problem; code runs fine

Solution

  1. Step 1: Identify the macro usage error

    The code uses LINE instead of the correct predefined macro __LINE__.
  2. Step 2: Understand consequences

    Since LINE is undefined, this causes a compilation error.
  3. Final Answer:

    LINE is not a predefined macro; it should be __LINE__ -> Option A
  4. Quick Check:

    Predefined macros need double underscores [OK]
Hint: Predefined macros always have double underscores before and after [OK]
Common Mistakes:
  • Using LINE without underscores
  • Thinking %d is wrong for line number
  • Ignoring missing macro error
5. You want to log the current file name, line number, and compilation date in your C program for debugging. Which code snippet correctly uses predefined macros to do this?
hard
A. printf("File: %s, Line: %d, Date: %s\n", _FILE_, _LINE_, _DATE_);
B. printf("File: %s, Line: %d, Date: %s\n", FILE, LINE, DATE);
C. printf("File: %s, Line: %d, Date: %s\n", "__FILE__", "__LINE__", "__DATE__");
D. printf("File: %s, Line: %d, Date: %s\n", __FILE__, __LINE__, __DATE__);

Solution

  1. Step 1: Identify correct predefined macros

    The macros __FILE__, __LINE__, and __DATE__ provide file name, line number, and compile date respectively.
  2. Step 2: Check correct usage in printf

    Using them directly without quotes and with correct underscores prints the desired info.
  3. Final Answer:

    printf("File: %s, Line: %d, Date: %s\n", __FILE__, __LINE__, __DATE__); -> Option D
  4. Quick Check:

    Use double underscore macros directly in printf [OK]
Hint: Use __FILE__, __LINE__, __DATE__ directly without quotes [OK]
Common Mistakes:
  • Using macros without underscores
  • Putting macros inside quotes (prints names, not values)
  • Using single underscores instead of double
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard